[Easy] LeetCode 938. Range Sum of BST
链接: https://leetcode.com/problems/range-sum-of-bst/
题目描述:
Given the root node of a binary search tree, return the sum of values of all nodes with value between L and R (inclusive).
The binary search tree is guaranteed to have unique values.
给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。
二叉搜索树保证具有唯一的值
Example 1:
Input: root = [10,5,15,3,7,null,18], L = 7, R = 15
Output: 32
Example 2:
Input: root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10
Output: 23
Tag: Tree
解题思路
比较简单的一道tree traverse. 题目让我们找给定BST中所有在范围[L, R]内的node的值的总和,我们直接利用BST的性质来求出来就可以了。
在这里我们要利用BST的特定。如果当前节点值大于R了,那么只有当前节点的左子树还有可能存在[L,R]范围内的节点。同理,如果当前节点的数值小于L了,那么只有当前节点的右子树还有可能存在[L,R]范围内的节点。如果当前节点正好落在[L,R]的范围内。那么我们对左右子树都要查找,但是可以相应的缩小查找范围。左子树为[L, node.val], 右子树为[NODE.VAL, R]
解法一:
class Solution {
int sum =0;
public int rangeSumBST(TreeNode root, int L, int R) {
if(root == null) return 0;
if(root.val < L){
rangeSumBST(root.right, L, R);
}else if(root.val > R){
rangeSumBST(root.left, L, R);
}else{
sum+=root.val;
rangeSumBST(root.left, L, root.val);
rangeSumBST(root.right, root.val, R);
}
return sum;
}
}
解法二:
class Solution {
public int rangeSumBST(TreeNode root, int L, int R) {
if(root == null) return 0;
else if(root.val > R) return rangeSumBST(root.left, L, R);
else if(root.val < L) return rangeSumBST(root.right, L, R);
return rangeSumBST(root.left, L, root.val) +
rangeSumBST(root.right, root.val, R) +
root.val;
}
}