938. 二叉搜索树的范围和
给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。
二叉搜索树保证具有唯一的值。
示例 1:
输入:root = [10,5,15,3,7,null,18], L = 7, R = 15
输出:32
示例 2:
输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10
输出:23
二叉搜索树就是左子树的值小于根节点,右子树的值大于根节点的二叉树
此题乍一看有些懵,一开始我以为是说要返回L和R之间的所有节点的值是按层返回的,不是按大小返回。
其实是返回所有大于等于L小于等于R的值所在节点。
因为二叉搜索树已经按规律为我们把数的大小排好序,那么我们只需要判断当前节点所在值如果小于L,那么就找该节点的下一个右子树上所在值(因为再循着左子树往下寻找,依然都是比L小的节点) 同理 当前节点所在值大于R 那么就找该节点的下一个左子树所在值。
如果当前节点值在L和R之间 那么就返回该节点值并继续递归该节点的左子树和右子树(如果他们存在的话)
源代码如下:
class Solution {
public:
int rangeSumBST(TreeNode* root, int L, int R) {
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);
}
};
网友评论