看到这个题首先想到利用中序遍历来实现(因为中序遍历的特点就是节点升序),在树不为空时进行操作
- 判断根节点与low的大小,根节点大于low需要在根节点的左子树中找(使用递归,一直查找左子树,直到不满足条件) // L
- 将此时根节点的值比较看是否在范围内,在的话将值加到sum中 //V
- 判断根节点与high的大小,根节点小于high需要在根节点的右子树中找(使用递归,一直查找右子树,直到不满足条件) // R
代码实现如下:
int sum = 0;
int rangeSumBST(Node *node, int low, int high)
{
if (node!= nullptr)
{
if (node->data_ > low)
{
rangeSumBST(node->left_, low, high);
}
if (node->data_ >= low && node->data_ <= high)
{
sum += node->data_;
}
if (node->data_ < high)
{
rangeSumBST(node->right_, low, high);
}
}
return sum;
}