解题思路:
由于是二叉搜索,所以中序遍历一定是升序排列的,递归的方法应该是最简单且易于理解的方法了,对于每个节点,如果为空,返回0,相当于没有加,如果太小了,那么就往右边找,大了往左边找,满足条件的返回当前值和左右子节点的和,代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int rangeSumBST(TreeNode* root, int low, int high) {
// 如果当前为空
if(root == nullptr) {
return 0;
}
// 如果当前值太小,往右边找
if(root -> val < low) {
return rangeSumBST(root -> right, low, high);
}
// 值太大,往左边找
if(root -> val > high) {
return rangeSumBST(root -> left, low, high);
}
// 符合条件的返回当前值和左右子树的和
return root -> val + rangeSumBST(root -> left, low, high) + rangeSumBST(root -> right, low, high);
}
};
/*作者:heroding
链接:https://leetcode-cn.com/problems/range-sum-of-bst/solution/cdi-gui-by-heroding-011f/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/