/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
* 10
* / \
* 5 15
* / \ /
*3 7 0
*符合 L <= val <= R 的所有节点的总和,即例子 1 中 32 = 7 + 10 + 15,值为10的结点是处于L和R之间的结点
*/
class Solution {
public int rangeSumBST(TreeNode root, int L, int R) {
if(root == null){
return 0;
}
/**
* L=R=root.val的情况 直接返回
*/
if(L == root.val && root.val == R){
int sum = root.val;
return sum;
}
//比如L-R:[3,15] rangeSumBST(root.left, L, R)遍历到3的时候返回3
if(L <= root.val && root.val<= R){
// int sum = rangeSumBST(root.left, L, R) + root.val + rangeSumBST(root.right, L, R);
//遍历左子树,获取满足区间的节点的值
int sum1 = rangeSumBST(root.left, L, R);
//获取当前节点的值
int sum2 = root.val;
//遍历右子树 获取满足区间的节点的值
int sum3 = rangeSumBST(root.right, L, R);
return sum1 + sum2 + sum3;
}else if(root.val < L){
//当前节点小于L,往右子节点寻找
return rangeSumBST(root.right, L, R);
}else if(root.val > R){
//当前节点大于R,往左子节点寻找
return rangeSumBST(root.left, L, R);
}
return 0;
}
}