E-938. Range Sum of BST

'''
通过条件限定, 进行中序遍历, 因此剪枝了.
Time: O(n)(注意与普通的在BST里面找点不一样, 这是一个范围, 所以是O(n).(普通的是O(H),
如果是平衡二叉树, 即Balanced Binary Search Tree, 就是O(logn)))
Space: O(H), 即树的高度, 因为range_sum最多被调用H次(因为进行了剪枝, 如果不剪枝, 就是n次)
'''
class Solution:
    def __init__(self):
        self.sum=0
    
    def rangeSumBST(self, root: TreeNode, L: int, R: int) -> int:
        def range_sum(root):
            if not root:
                return 0
            if L<=root.val:
                range_sum(root.left)
            if L<=root.val<=R:
                self.sum+=root.val
            if root.val<=R:
                range_sum(root.right)
            
        range_sum(root)
        return self.sum

Last updated

Was this helpful?