题目地址:
https://leetcode.com/problems/range-sum-of-bst/
给定一棵二叉搜索树,再给定一个范围 [ L , R ] [L,R] [L,R],求这棵树中所有在这个范围里的数的和。
分治法。先判断树根是否在范围里,如果不在,那就直接求解一个子树的结果即可;否则就计算左右子树在范围中的数之和,再加上树根即可。代码如下:
class Solution {
public:
int rangeSumBST(TreeNode* root, int low, int high) {
if (!root) return 0;
int res = 0;
if (root->val > low) res = rangeSumBST(root->left, low, high);
if (root->val < high) res += rangeSumBST(root->right, low, high);
if (low <= root->val && root->val <= high) res += root->val;
return res;
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( h ) O(h) O(h)。