Skip to content

Latest commit

 

History

History
64 lines (48 loc) · 2 KB

975-range-sum-of-bst.md

File metadata and controls

64 lines (48 loc) · 2 KB

给定二叉搜索树的根结点 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

 

提示:

  • 树中节点数目在范围 [1, 2 * 104]
  • 1 <= Node.val <= 105
  • 1 <= low <= high <= 105
  • 所有 Node.val 互不相同

Solutions

1. DFS

深度优先遍历,判断当前节点值 v 与 low, high 关系。

  • 如果 low <= v <= high 则有:sumv = n.v + dfs(n.left) + dfs(n.right)
  • v < low 则有:sumv = dfs(n.right)
  • v > high 则有:sumv = dfs(n.left)
# Definition for a binary tree node.
# 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:

        if root is None:
            return 0
        
        v = root.val
        if v >= low and v <= high:
            return v + self.rangeSumBST(root.left, low, high) + self.rangeSumBST(root.right, low, high)
        elif v > high:
            return self.rangeSumBST(root.left, low, high)
        else:
            return self.rangeSumBST(root.right, low, high)