题目
给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。
示例 :
输入:[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<TreeNode> list = new ArrayList<>();
inOrder(root,list);
for (TreeNode treeNode : list) {
System.out.println(treeNode.val);
}
//再重新生成树
TreeNode newRoot = null;
for (TreeNode treeNode : list) {
newRoot = add(newRoot, treeNode);
}
return newRoot;
}
private void inOrder(TreeNode node, List<TreeNode> list){
if(node == null){
return;
}
inOrder(node.left,list);
list.add(node);
inOrder(node.right,list);
}
private TreeNode add(TreeNode root,TreeNode node){
node.left =null;
node.right = null;
if(root == null){
return node;
}
root.right = add(root.right,node);
return root;
}