897. 递增顺序搜索树
给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。
示例 1:
输入: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]
示例 2:
输入:root = [5,1,7]
输出:[1,null,5,null,7]
提示:
- 树中节点数的取值范围是
[1, 100]
0 <= Node.val <= 1000
方法一:中序遍历
思路
题目比较简单,中序遍历时维护下前驱节点即可。值得注意的是,Java 是引用传递,所以需要 new TreeNode()
。
中序遍历 介绍帖。
参考代码
public TreeNode increasingBST(TreeNode root) {
TreeNode dummy = new TreeNode();
TreeNode pre = dummy;
Deque<TreeNode> stack = new LinkedList<>();
while (!stack.isEmpty() || root != null) {
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
// 抛开这两行代码,就是中序遍历的迭代写法
pre.right = new TreeNode(root.val);
pre = pre.right;
root = root.right;
}
return dummy.right;
}
执行结果