问题描述

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

题目所给代码

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int rangeSumBST(TreeNode root, int L, int R) {
}
}

题意理解

光看懂这道题就花了好长时间…
只看所给的文字描述确实很难理解.看它给的代码.可以看出是二叉树结构.来写一个求二叉搜索树的范围间的和(根据方法的名字理解).

​给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。​​ 这句话并不能去认为是下面描述的输入和L,R的值. 实际上是提示的代码的方法的三个参数.给出根节点,以及L和R的值.来解释这三个参数的实际作用.

再根据下面的示例来理解L-R的具体范围:
​​​输入:root = [10,5,15,3,7,null,18], L = 7, R = 15​​​​输出:32​​ 7,10,15 之和为32.故 7<=X<=15.

题解思路

条件给出了根结点,从上往下遍历.可以使用递归,来求解.重复的条件就是结点的左右子树,结束条件就是左右子树的值是否在L,R的范围内,返回结点在范围内的值的和

代码演示

我没有作出来…对递归的不熟悉以及对二叉树的理解不深刻.导致懵圈状态.时间紧就参考了大佬代码

参考链接:​​https://leetcode-cn.com/ericzhangbuaa/​

class Solution {
public int rangeSumBST(TreeNode root, int L, int R) {
if (root == null) {
return 0;
}
if (root.val < L) {
return rangeSumBST(root.right, L, R);
}
if (root.val > R) {
return rangeSumBST(root.left, L, R);
}
return root.val + rangeSumBST(root.left, L, R) + rangeSumBST(root.right, L, R);
}
}



错误代码(仅供自己反思):

class Solution {
public int rangeSumBST(TreeNode root, int L, int R) {
if(root.left == null || root.left.val < L) { return 0; }
if(root.right == null || root.right.val > R) { return 0; }

return rangeSumBST(root.left,L, R) + root.left.val + rangeSumBST(root.right, L, R)+root.val + root.right.val;
}
}