Day 23 | 669. 修剪二叉搜索树 、 108.将有序数组转换为二叉搜索树 、538.把二叉搜索树转换为累加树 、总结篇

669. 修剪二叉搜索树

题目
文章讲解
视频讲解

思路:二叉搜索树有序,若当前结点值大于high,递归左子树,小于low,递归右子树。后要将下一层处理完左子树的结果赋给root->left,处理完右子树的结果赋给root->right


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.left = trimBST(root.left, low, high);
        root.right = trimBST(root.right, low, high);
        return root;
    }
}

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

题目
文章讲解
视频讲解

思路:

  • 数组的长度用nums.length记录
  • 取中点,分左右(左闭右闭)
  • 注意避免越界

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        TreeNode root = travelsal(nums, 0, nums.length - 1);
        return root;
    }

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

538.把二叉搜索树转换为累加树

文章讲解
视频讲解

思路:

  • pre的位置,需要设置成全局,否则作用域为局部的话,每次调用都会创建新的pre值为0

class Solution {
    int pre = 0;

    public TreeNode convertBST(TreeNode root) {
        travelsal(root);
        return root;
    }

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

总结篇

文章讲解

你可能感兴趣的:(二月红,java,力扣)