LeetCode 897. 递增顺序搜索树
给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。
题解:
对于本题而言,可以采用列表保存中序遍历的结果来建树,这样的话需要二外的列表空间。下面的代码采用在中序遍历过程中改变节点指向的方式,优化了空间复杂度。
/**
* 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 {
private TreeNode resNode;
public TreeNode increasingBST(TreeNode root) {
TreeNode temp = new TreeNode(-1);
resNode = temp;
inorder(root);
return temp.right;
}
public void inorder(TreeNode root){
if(root == null)
return;
inorder(root.left);
resNode.right = root;
root.left = null;
resNode = root;
inorder(root.right);
}
}
题目连接:https://leetcode-cn.com/problems/increasing-order-search-tree/
题解参考:https://leetcode-cn.com/problems/increasing-order-search-tree/solution/di-zeng-shun-xu-cha-zhao-shu-by-leetcode-dfrr/