简单的思路就是,中序遍历存储每个节点于数组中,再遍历数组,构建新的树,右子树,一直遍历下去。
/**
* Definition for a binary tree node.
* public 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;
* }
* }
*/
class Solution {
public TreeNode increasingBST(TreeNode root) {
List<Integer> vals = new ArrayList();
inorder(root,vals);
TreeNode res = new TreeNode(0);
TreeNode p = res;
for(int v:vals){
p.right = new TreeNode(v);
p = p.right;
}
return res.right;
}
public void inorder(TreeNode node, List<Integer> vals){
if(node == null) return;
inorder(node.left,vals);
vals.add(node.val);
inorder(node.right,vals);
}
}