LeetCode 938. 二叉搜索树的范围和(二叉树遍历+搜索剪枝)
文章目录
- 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. 二叉搜索树的范围和(二叉树遍历+搜索剪枝)相关推荐
- leetcode —— 938. 二叉搜索树的范围和
给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和. 二叉搜索树保证具有唯一的值. 示例 1: 输入:root = [10,5,15,3,7,null,18], L = 7 ...
- LeetCode 173. 二叉搜索树迭代器(中序遍历)
文章目录 1. 题目信息 2. 二叉树中序遍历 1. 题目信息 实现一个二叉搜索树迭代器.你将使用二叉搜索树的根节点初始化迭代器. 调用 next() 将返回二叉搜索树中的下一个最小的数. 示例: B ...
- leetcode 530. 二叉搜索树的最小绝对差(Java版)
题目 https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/ 题解 中序遍历法. 本题要求二叉搜索树任意两节点差的绝对 ...
- leetcode 235. 二叉搜索树的最近公共祖先(Java版,树形dp套路)
题目 原题地址:leetcode 235. 二叉搜索树的最近公共祖先 说明: 所有节点的值都是唯一的. p.q 为不同节点且均存在于给定的二叉搜索树中. 题解 关于 树形dp 套路,可以参考我的另一篇 ...
- LeetCode 1586. 二叉搜索树迭代器 II(数组+栈)
文章目录 1. 题目 2. 解题 1. 题目 实现二叉搜索树(BST)的中序遍历迭代器 BSTIterator 类: BSTIterator(TreeNode root) 初始化 BSTIterato ...
- LeetCode 783. 二叉搜索树结点最小距离(中序遍历)
1. 题目 给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值. 示例:输入: root = [4,2,6,1,3,null,null] 输出: 1 解释: 注意,root是树结点 ...
- leetcode —— 235. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖 ...
- [leetcode] 96. 不同的二叉搜索树 +[补充] 不同的二叉树,不同形态的二叉树的个数----catalan数
leetcode官方的题解:https://leetcode-cn.com/problems/unique-binary-search-trees/solution/bu-tong-de-er-cha ...
- Leetcode 235.二叉搜索树的最近公共祖先
Time: 20190907 Type: Easy 题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p. ...
最新文章
- 如何通过参数来切换图表和数据
- mybatis 大于小于转义_10 HTML5特性、转义字符和注释
- linux下/proc/cpuinfo文件
- 7.泡妞与设计模式(八)模板模式
- linux中fork和exec
- CF1375F-Integer Game【交互】
- 玩转异步 JS :async/await 简明教程(附视频下载)
- linux编译c++ 静态库,C/C++ 条件编译静态库
- java config 类_Spring ----JavaConfig类代替XML配置Bean
- python 发红包import random用redenv,Python微信发红包编码案例 微信发红包的架构模式 - push博客...
- java量_Java 2. 量与常量
- 内存泄露和溢出的区别_Java 中的内存溢出和内存泄露是什么?我给你举个有味道的例子?...
- 块级、行内元素水平垂直居中方法
- 成绩查询数据结构c语言,学生成绩管理系统(数据结构c语言版源代码)09169.pdf
- python画直方图-从零开始学Python【13】--matplotlib(直方图)
- Duplicate key
- ansys15.0安装教程
- 5分钟商学院-个人篇-沟通能力
- apache启动失败后怎么解决?
- 西南石油大学天空教室_学府之旅 | 西南石油大学
热门文章
- 网络七层协议 五层模型 TCP连接 HTTP连接 socket套接字
- 太原理工大学c语言课程设计报告,[太原理工大学C语言实验报告.doc
- linux启用ipmi服务,使用 ipmitool 实现 Linux 系统下对服务器的 ipmi 管理
- LeetCode8——String to Integer (atoi)(自己编写atoi函数)
- 《跟我一起写Makefile》读书笔记(1)
- NFS方式挂载rootfs的设置方法
- Mysql索引类型分析
- 《领域驱动设计》第二部分:模型驱动设计的构造块 第四章:分离领域 阅读笔记...
- 在vue.js引用图片的问题
- python--socket套接字/TCP