给定一个树,按中序遍历重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。
代码如下
class Solution
{
public TreeNode increasingBST(TreeNode root)
{
inorder(root);
TreeNode m =new TreeNode(0);
TreeNode n =m;
for(int i:list)
{
n.right =new TreeNode(i);
n=n.right;
}
return m.right;
}
List<Integer> list = new ArrayList<>();
public void inorder(TreeNode root)
{
if(root==null)
return ;
inorder(root.left);
list.add(root.val);
inorder(root.right);
}
}
首先,我们按中序遍历二叉树,将值存储入list中,其次,我们构建二叉树,其左孩子总为空,右孩子则顺序赋予list中的值,最后返回m的右孩子,即为重新构建的树。