展平二叉搜索树
给你一棵二叉搜索树,请 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。
class Solution {
//定义一个容器将中序遍历之后的节点存起来(升序)
public List<TreeNode> list = new ArrayList<>();
public TreeNode increasingBST(TreeNode root) {
preTravel(root);
TreeNode head=list.get(0);
TreeNode temp=head;
for (int i = 1; i < list.size(); i++) {
//获得下一个节点
temp.right=list.get(i);
//将当前节点的左孩子置空
temp.left=null;
//将临时节点指为当前节点的右子节点
temp=temp.right;
//将当前节点的左孩子置空
temp.left=null;
}
return head;
}
//中序遍历
public void preTravel(TreeNode root){
if(root==null){
return;
}
preTravel(root.left);
list.add(root);
preTravel(root.right);
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}