给定二叉搜索树的根结点 root,返回 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。

什么是二叉搜索树?
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

二叉搜索树资料来自百度百科。
分析示例1
输入:root = [10,5,15,3,7,null,18], L = 7, R = 15
输出:32
LR间值为10,15,7,和为32.
继续分析可知root(根结点)为10。
那么该如何利用递归求和呢?
法一:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:int rangeSumBST(TreeNode* root, int L, int R) {if(root == NULL)//跟结点不存在则为空树,直接返回0{return 0;}if(root->val >=L && root->val <= R){return root->val + rangeSumBST(root->left , L ,R) + rangeSumBST(root->right , L , R);//递归,当前值和左右子树符合条件的值相加}return rangeSumBST(root->left, L, R) + rangeSumBST(root->right, L, R);//继续往下递归}
};

法二:
基本相同,最后一步换种方式

class Solution {
public:int rangeSumBST(TreeNode* root, int L, int R) {if(root == NULL)return 0;if(root->val <= R && root->val >= L)return rangeSumBST(root->left, L ,R) +root->val + rangeSumBST(root->right, L ,R);else if(root->val > R){return rangeSumBST(root->left, L ,R);}else{return rangeSumBST(root->right, L ,R);}}
};

递归1:二叉搜索树的范围和相关推荐

  1. PAT甲级1115 Counting Nodes in a BST (30分):[C++题解] 递归建二叉搜索树、dfs求一层结点数量

    文章目录 题目分析 题目链接 题目分析 分析 首先本题给定的二叉搜索树的定义和其他地方的不同.本题小于等于的是左子树,右子树是大于根结点的. 然后说一下做题的思路. 给定一串数据,让构造二叉搜索树. ...

  2. 【java学习之路】(数据结构篇)004.递归和二叉搜索树

    递归 递归的概念 递归的方式求1-100的和 public class DGDemo {public static int sum(int n){//递归到底的情况if(n==1){return 1; ...

  3. 二叉排序树(二叉搜索树,二叉查找树)

    递归实现二叉搜索树(BST)的创建 以数组的形式实现(循环) 以递归的形式实现

  4. Leetcode 109. 有序链表转换二叉搜索树 解题思路及C++实现

    方法一:将链表转为数组来处理 解题思路: 因为链表不好处理,所以我先把链表处理成数组,因为是一个升序数组,所以直接将中间的数当成根结点,然后对左半部分的节点和右半部分的节点进行递归构建二叉搜索树. 在 ...

  5. leetcode 538. 把二叉搜索树转换为累加树 思考分析

    题目 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和. 提醒一 ...

  6. LeetCode 938. 二叉搜索树的范围和(二叉树遍历+搜索剪枝)

    文章目录 1. 题目 2. 解题 递归+剪枝 中序遍历循环+剪枝 1. 题目 给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和. 题目的意思,节点的值在[L, R]这个区 ...

  7. C++初阶学习————二叉树进阶(二叉搜索树)

    二叉树进阶 二叉搜索树的概念 二叉搜索树的操作 基本框架 二叉搜索树的插入 二叉搜索树的查找 二叉搜索树的删除 整体代码 循环写法 递归写法 二叉搜索树的应用 二叉搜索树的性能分析 前面的文章介绍过二 ...

  8. C++ 二叉搜索树(补充)

      目录 1.搜索二叉树的删除 2.递归销毁搜索二叉树 3.递归复制二叉搜索树,搜索二叉树的深拷贝,析构函数 4.赋值 5.递归版本的查找 *6.递归版本的插入 7.递归版本的删除 代码总览 1.搜索 ...

  9. C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划

    C++数据结构和算法2 栈 双端/队列 冒泡选择插入归并快排 二三分查找 二叉树 二叉搜索树 贪婪 分治 动态规划 博文末尾支持二维码赞赏哦 _ github 章3 Stack栈 和 队列Queue= ...

  10. 二叉搜索树(二叉树进阶)

    文章目录 二叉搜索树的概念 二叉搜索树的实现 二叉搜索树的节点 构造函数 拷贝构造函数 赋值运算符重载 析构函数 插入函数 非递归实现 递归实现 删除函数 非递归实现 递归实现 查找函数 非递归实现 ...

最新文章

  1. 哈希表(HashMap)分析及实现(JAVA)
  2. Python 个人的失误记录之str.replace
  3. C语言 | 基于STM32的MPU6050模块程序(主程序)
  4. echarts2.2.7入门
  5. python yield
  6. ubuntu php加载不了gd,ubuntu 中php不支持gd库的freetype,导致页面验证码无法加载
  7. myeclipse编写的html页面乱码问题
  8. dimm和udimm_服务器内存UDIMM与RDIMM有什么区别
  9. 微信公众号学习--点亮图片
  10. 微信小程序开发(2) - 微信小程序实现拍照和录像拍摄功能方法
  11. Javascript显示隐藏DIV
  12. 你们知道怎么将图片转成ico? 小妙招分享给你
  13. Global Illumination_Screen-Space Directional Occlusion(SSDO)
  14. 计算机上的游戏怎么不见了怎么办,电脑自带小游戏消失怎么找回?高手教你找回电脑自带小游戏...
  15. Linux下内核进程、用户进程和轻量级进程(LWP)的理解
  16. MS7024 TV Encode digital数字信号转AV/SV配置说明
  17. MegaCli 安装及使用
  18. selenium控制日历控件
  19. GIS理论知识(二)之GIS标准、体系结构及平台软件
  20. 新型安防探测设备及应用

热门文章

  1. hdu-1166敌兵布阵(树状数组)
  2. hdu 4160 Dolls 匈牙利算法求最大匹配
  3. Golang的基本类型、引用类型、复合类型
  4. HTML5 进阶系列:拖放 API 实现拖放排序
  5. canvas象棋 画图
  6. Kafka broker配置介绍 (四)
  7. Spring+Quartz 集群
  8. VS.NET2005中的WEBPART初步(一)
  9. Win10:tensorflow 学习笔记(1)
  10. 【Python】for 循环次数