【LeetCode每日一题】938. 二叉搜索树的范围和

2024-2-26

文章目录

938. 二叉搜索树的范围和

思路:

1.在二叉搜索树中:左子树的结点都小于根节点,右子树的结点都大于根节点,每个结点法左右子树均要符合二叉搜索树

2.如果根节点的值大于hight,就排除右树,只在左树中查找

3.如果根节点的值小于low,就排除左树,只在右树中查找

4.如果正好在两者之间,则左树右树都要考虑,将根节点的值和递归的结果累加

写法一:在中间累加
java 复制代码
    //[938. 二叉搜索树的范围和]-写法二
//
    public int rangeSumBST2(TreeNode root, int low, int high) {
        if (root==null){
            return 0;
        }
        int x = root.val;
        int sum = low<=x && x<=high?x:0;
        //根节点的值如果在范围内,返回根节点的值,否则就返回0,相当于排除了不在范围内的值
        if(x>low){
            sum+=rangeSumBST2(root.left,low,high);
        }
        if (x<high){
            sum+=rangeSumBST2(root.right,low,high);
        }
        return sum;
    }
写法二:在最后累加
java 复制代码
    //[938. 二叉搜索树的范围和]
    public int rangeSumBST(TreeNode root, int low, int high) {
        if (root == null) {
            return 0;
        }
        int x = root.val;
        if (x > high) {
            return rangeSumBST(root.left, low, high);
            //右树不在范围内,只需要递归左树
        }
        if (x < low) {
            return rangeSumBST(root.right, low, high);
            //左树不在范围内,只需要递归左树
        }
        return x + rangeSumBST(root.left, low, high) + rangeSumBST(root.right, low, high);
        //左右子树都可能
    }
相关推荐
Kx_Triumphs1 小时前
HDU4348 To the moon(主席树区间修改模板)
算法·题解
旖-旎1 小时前
《LeetCode647 回文子串 || LeetCode 5 最长回文子串》
c++·算法·leetcode·动态规划·哈希算法
轻颂呀2 小时前
约瑟夫环问题
算法
科技大视界4 小时前
投资AI项目,传统尽调不够用了——李章虎律师拆解算法、数据、算力三大雷区
人工智能·算法·数据挖掘
郝学胜-神的一滴4 小时前
算法实战:最小k个数——大顶堆的优雅解法
开发语言·数据结构·c++·python·程序人生·算法·排序算法
Irissgwe4 小时前
算法滑动窗口
数据结构·算法
怪兽学LLM5 小时前
LeetCode 105. 从前序与中序遍历序列构造二叉树:分治递归思路详解
算法·leetcode·职场和发展
可编程芯片开发5 小时前
基于PI控制的三相整流器控制系统的simulink建模与仿真,包含超级电容充电和电机
算法
酿情师5 小时前
区块链共识算法深度拆解:PoW、PoS、PBFT、Raft 原理解析
算法·区块链·共识算法