题目地址:
https://www.lintcode.com/problem/range-sum-of-bst/description
给定一棵BST,再给定区间 [ L , R ] [L,R] [L,R],求BST中所有属于这个区间的数字之和。
思路是递归,如果树根小于 L L L则只需返回右子树的range sum,类似如果树根大于 R R R则只需返回左子树的range sum,否则返回树根加上左右子树的range sum。代码如下:
public class Solution {
/**
* @param root: the root node
* @param L: an integer
* @param R: an integer
* @return: the sum
*/
public int rangeSumBST(TreeNode root, int L, int R) {
// write your code here.
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 TreeNode {
int val;
TreeNode left, right;
TreeNode(int x) {
val = x;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( h ) O(h) O(h)。