目录
题目描述
给你一棵二叉搜索树,请 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。
输入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]
输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]
题解
题目要求我们返回按照中序遍历的结果改造而成的、只有右节点的等价二叉搜索树。我们可以进行如下操作:
先对输入的二叉搜索树执行中序遍历,将结果保存到一个列表中;
然后根据列表中的节点值,创建等价的只含有右节点的二叉搜索树,其过程等价于根据节点值创建一个链表。
代码
/**
* 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> res=new ArrayList<Integer>();
fixOrder(root,res);
TreeNode node=new TreeNode(0);
TreeNode cur=node;
for(int value:res){
TreeNode tmp=new TreeNode(value);
cur.right=tmp;
cur=cur.right;
}
return node.right;//这里要返回 new出来的结点
}
public void fixOrder(TreeNode root,List<Integer> res){//保存中序遍历的结果
if(root==null){return;}
fixOrder(root.left,res);
res.add(root.val);
fixOrder(root.right,res);
}
}
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:36 MB, 在所有 Java 提交中击败了34.26%的用户
通过测试用例:37 / 37