要求
给定二叉搜索树的根结点 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
核心代码
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def rangeSumBST(self, root: TreeNode, low: int, high: int) -> int:
self.res = 0
def inorder(node):
if not node:
return
inorder(node.left)
if node.val >= low and node.val <= high:
self.res += node.val
inorder(node.right)
inorder(root)
return self.res
另一解法
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def rangeSumBST(self, root: TreeNode, low: int, high: int) -> int:
res = 0
if not root:
return 0
if low<=root.val <= high:
res += root.val
if root.val < high:
res += self.rangeSumBST(root.right,low,high)
if root.val > low:
res += self.rangeSumBST(root.left,low,high)
return res
解题思路:第一种解法:我们使用中序遍历的方式,当我们节点的值在[low,high]之间的时候,我们就把他记录到结果中,这样最终得到范围内的和。第二种解法:使用递归的方式,因为是二叉搜索树,根节点左侧的值比根节点小,根节点右侧的值比根节点大,所以根据我们的根节点的值排除掉一些子树的遍历,所以比第一种方式更加高效。