算法day18-二叉树(8)

目录

  1. 修剪二叉搜索树
  2. 将有序数组转换为二叉搜索树
  3. 把二叉搜索树转换为累加树

一、修建二叉搜索树

https://leetcode.cn/problems/trim-a-binary-search-tree/?envType=problem-list-v2&envId=8At1GmaZ

 

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

 

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

https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/?envType=problem-list-v2&envId=8At1GmaZ

 

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

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

 

三、二叉搜索树转换为累加树

https://leetcode.cn/problems/convert-bst-to-greater-tree/?envType=problem-list-v2&envId=8At1GmaZ

 

 

class Solution {
    int sum = 0;

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

    public void traverse(TreeNode root) {
        if (root == null) return;

        // 先处理右子树(较大的值)
        traverse(root.right);

        // 更新当前节点
        sum += root.val;
        root.val = sum;

        // 再处理左子树(较小的值)
        traverse(root.left);
    }
}

 

posted @ 2025-05-16 23:29  筱倩  阅读(12)  评论(0)    收藏  举报