LeetCode Day23 669&108&538

51 阅读1分钟

669. 修剪二叉搜索树

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        if(root == null){
            return null;
        }

        if(root.val < low){
            return trimBST(root.right, low, high);
        }

        if(root.val > high){
            return trimBST(root.left, low, high);
        }

        root.right = trimBST(root.right, low, high);
        root.left = trimBST(root.left, low, high);
        return root;
    }
}

108. 将有序数组转换为二叉搜索树

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return sortedArrayToBST(nums, 0, nums.length);
    }

    public TreeNode sortedArrayToBST(int[] nums, int left, int right){
        if(right <= left) return null;
        int mid = (left + (right - left) / 2);
        TreeNode root = new TreeNode(nums[mid]);
        root.left = sortedArrayToBST(nums, left, mid);
        root.right = sortedArrayToBST(nums, mid + 1, right);
        if(left - right == 1){
            return new TreeNode(nums[left]);
        }
        return root;
    }
}

538. 把二叉搜索树转换为累加树这题其实是反向的中序遍历(一开始甚至没看懂题目。。),实际上就是按照右根左的顺序递增节点之间的值,然后更新。

class Solution {
    int sum;
    public TreeNode convertBST(TreeNode root) {
        sum = 0;
        convertBST1(root);
        return root;
    }

    public void convertBST1(TreeNode root){
        if(root == null) return;
        convertBST1(root.right);
        sum += root.val;
        root.val = sum;
        convertBST1(root.left);
    }
}