给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。
示例 :
输入:[5,3,6,2,4,null,8,1,null,null,null,7,9]
5
/ \
3 6
/ \ \
2 4 8
/ / \
1 7 9
输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]
1
\
2
\
3
\
4
\
5
\
6
\
7
\
8
\
9
解题思路:这道题比较简单,走一个中序遍历,然后加入到一个链表中,然后重新创建一棵树,在创建树的时候,只创建右子树,关键点就是创建树的起始点的选择,可以任意假设一个点,然后输出他的右子树。
public TreeNode increasingBST(TreeNode root) {
List<Integer> integerList = new ArrayList<>();
inzhong(root,integerList);
TreeNode treeNode = new TreeNode(0);
TreeNode cur = treeNode;
for(int v:integerList){
cur.right = new TreeNode(v);
cur = cur.right;
}
return treeNode.right;
}
//中序便利
public void inzhong(TreeNode root,List<Integer> integers){
if (root != null){
inzhong(root.left,integers);
integers.add(root.val);
inzhong(root.right,integers);
}
}