给定二叉搜索树的根结点 root
,返回值位于范围 [low, high]
之间的所有结点的值的和。
示例 1:
输入:root = [10,5,15,3,7,null,18], low = 7, high = 15 输出:32
示例 2:
输入:root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10 输出:23
思路:充分利用二叉搜索树的特性,根据值来判断,若根节点的值小于low,那左子树的值肯定都小于low不用遍历了,因此只需要递归一下右子树;若根节点的值大于high,那右子树的值肯定都大于high不用遍历了,因此只需要递归一下左子树。
代码(Python):
class Solution(object):
def rangeSumBST(self, root, low, high):
if not root:
return 0
if root.val < low:
return self.rangeSumBST(root.right,low,high)
if root.val > high:
return self.rangeSumBST(root.left,low,high)
return root.val + self.rangeSumBST(root.left,low,high) + self.rangeSumBST(root.right,low,high)