题目
思路
通过遍历整个二叉搜索树找出在low
和high
之间的结点并累加即可解决问题。如果使用递归的方式,以结点node为根结点的树的计算结果=左子树计算结果 + 右子树计算结果 + 在low和high范围内的当前值。为了减少不必要的遍历(剪枝),可以利用二叉搜索树左子树 <= 根节点 <= 右子树
的特性,避免访问某些子树。
代码
class Solution {
public:
int rangeSumBST(TreeNode* root, int low, int high) {
long sum = 0;
if (root == nullptr) {
return 0;
}
if (root->val >= low) {
sum += rangeSumBST(root->left, low, high);
}
if (root->val <= high) {
sum += rangeSumBST(root->right, low, high);
}
if (root->val >= low && root->val <= high) {
sum += root->val;
}
return sum;
}
};