文章目录

  • 1. 题目
  • 2. 解题
    • 递归+剪枝
    • 中序遍历循环+剪枝

1. 题目

给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。
题目的意思,节点的值在[L, R]这个区间内,就加到结果里,求所有符合条件的节点值加和

示例 1:输入:root = [10,5,15,3,7,null,18], L = 7, R = 15
输出:32
示例 2:输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10
输出:23提示:树中的结点数量最多为 10000 个。
最终的答案保证小于 2^31。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/range-sum-of-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

递归+剪枝

  • 二叉搜索树具有左子树所有值小于根节点,右子树大于根节点
  • 根据以上性质,注意递归法的剪枝

class Solution {public:int rangeSumBST(TreeNode* root, int L, int R) {int sum = 0;sumLR(root,L,R,sum);return sum;}void sumLR(TreeNode* root,int &L,int &R,int &sum){if(root == NULL)return;if(root->val >= L && root->val <= R){sum += root->val;sumLR(root->left,L,R,sum);sumLR(root->right,L,R,sum);}else if(root->val < L){//左子树都小于L,砍了sumLR(root->right,L,R,sum);}else if(root->val > R){//右子树都大于R,砍了sumLR(root->left,L,R,sum);}}
};

中序遍历循环+剪枝

  • 中序是递增序列,当当前值大于R时,后面均大于R,break


运行时间比较长,可能减的枝子没有递归多,递归枝杈比较多,随着深度变大,很大程度可被减掉

class Solution {public:int rangeSumBST(TreeNode* root, int L, int R) {int sum = 0;stack<TreeNode*> stk;while(root || !stk.empty()){while(root){stk.push(root);root = root->left;}root = stk.top();stk.pop();if(root->val >= L && root->val <= R)sum += root->val;else if(root->val > R)//中序非降,后面都大于Rbreak;root = root->right;}return sum;}
};

LeetCode 938. 二叉搜索树的范围和(二叉树遍历+搜索剪枝)相关推荐

  1. leetcode —— 938. 二叉搜索树的范围和

    给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和. 二叉搜索树保证具有唯一的值. 示例 1: 输入:root = [10,5,15,3,7,null,18], L = 7 ...

  2. LeetCode 173. 二叉搜索树迭代器(中序遍历)

    文章目录 1. 题目信息 2. 二叉树中序遍历 1. 题目信息 实现一个二叉搜索树迭代器.你将使用二叉搜索树的根节点初始化迭代器. 调用 next() 将返回二叉搜索树中的下一个最小的数. 示例: B ...

  3. leetcode 530. 二叉搜索树的最小绝对差(Java版)

    题目 https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/ 题解 中序遍历法. 本题要求二叉搜索树任意两节点差的绝对 ...

  4. leetcode 235. 二叉搜索树的最近公共祖先(Java版,树形dp套路)

    题目 原题地址:leetcode 235. 二叉搜索树的最近公共祖先 说明: 所有节点的值都是唯一的. p.q 为不同节点且均存在于给定的二叉搜索树中. 题解 关于 树形dp 套路,可以参考我的另一篇 ...

  5. LeetCode 1586. 二叉搜索树迭代器 II(数组+栈)

    文章目录 1. 题目 2. 解题 1. 题目 实现二叉搜索树(BST)的中序遍历迭代器 BSTIterator 类: BSTIterator(TreeNode root) 初始化 BSTIterato ...

  6. LeetCode 783. 二叉搜索树结点最小距离(中序遍历)

    1. 题目 给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值. 示例:输入: root = [4,2,6,1,3,null,null] 输出: 1 解释: 注意,root是树结点 ...

  7. leetcode —— 235. 二叉搜索树的最近公共祖先

    给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖 ...

  8. [leetcode] 96. 不同的二叉搜索树 +[补充] 不同的二叉树,不同形态的二叉树的个数----catalan数

    leetcode官方的题解:https://leetcode-cn.com/problems/unique-binary-search-trees/solution/bu-tong-de-er-cha ...

  9. Leetcode 235.二叉搜索树的最近公共祖先

    Time: 20190907 Type: Easy 题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p. ...

最新文章

  1. 如何通过参数来切换图表和数据
  2. mybatis 大于小于转义_10 HTML5特性、转义字符和注释
  3. linux下/proc/cpuinfo文件
  4. 7.泡妞与设计模式(八)模板模式
  5. linux中fork和exec
  6. CF1375F-Integer Game【交互】
  7. 玩转异步 JS :async/await 简明教程(附视频下载)
  8. linux编译c++ 静态库,C/C++ 条件编译静态库
  9. java config 类_Spring ----JavaConfig类代替XML配置Bean
  10. python 发红包import random用redenv,Python微信发红包编码案例 微信发红包的架构模式 - push博客...
  11. java量_Java 2. 量与常量
  12. 内存泄露和溢出的区别_Java 中的内存溢出和内存泄露是什么?我给你举个有味道的例子?...
  13. 块级、行内元素水平垂直居中方法
  14. 成绩查询数据结构c语言,学生成绩管理系统(数据结构c语言版源代码)09169.pdf
  15. python画直方图-从零开始学Python【13】--matplotlib(直方图)
  16. Duplicate key
  17. ansys15.0安装教程
  18. 5分钟商学院-个人篇-沟通能力
  19. apache启动失败后怎么解决?
  20. 西南石油大学天空教室_学府之旅 | 西南石油大学

热门文章

  1. 网络七层协议 五层模型 TCP连接 HTTP连接 socket套接字
  2. 太原理工大学c语言课程设计报告,[太原理工大学C语言实验报告.doc
  3. linux启用ipmi服务,使用 ipmitool 实现 Linux 系统下对服务器的 ipmi 管理
  4. LeetCode8——String to Integer (atoi)(自己编写atoi函数)
  5. 《跟我一起写Makefile》读书笔记(1)
  6. NFS方式挂载rootfs的设置方法
  7. Mysql索引类型分析
  8. 《领域驱动设计》第二部分:模型驱动设计的构造块 第四章:分离领域 阅读笔记...
  9. 在vue.js引用图片的问题
  10. python--socket套接字/TCP