Skip to content

Latest commit

 

History

History
120 lines (90 loc) · 4.22 KB

File metadata and controls

120 lines (90 loc) · 4.22 KB

938. Range Sum of BST (Easy)

Date and Time: Nov 27, 2024, 11:50 (EST)

Link: https://leetcode.com/problems/range-sum-of-bst


Question:

Given the root node of a binary search tree and two integers low and high, return the sum of values of all nodes with a value in the inclusive range [low, high].


Example 1:

Input: root = [10,5,15,3,7,null,18], low = 7, high = 15

Output: 32

Explanation: Nodes 7, 10, and 15 are in the range [7, 15]. 7 + 10 + 15 = 32.

Example 2:

Input: root = [10,5,15,3,7,13,18,1,null,6], low = 6, high = 10

Output: 23

Explanation: Nodes 6, 7, and 10 are in the range [6, 10]. 6 + 7 + 10 = 23.


Constraints:

  • The number of nodes in the tree is in the range [1, 2 * 10^4].

  • 1 <= Node.val <= 10^5

  • 1 <= low <= high <= 10^5

  • All Node.val are unique.


Walk-through:

Recursive Solution:

If current node.val < low, then we need to search its right subtree, so we call the recursive function on self.rangeSumBST(root.right, low, high), same thing when node.val > high, we call on its left subtree.

Otherwise, if node.val is within the range [low, high], we update res += node.val.


BFS Solution:

Use deque[] to normally run BFS, we only check if current node.val is within the range of [low, high], if so, we update res += node.val.


Recursive Solution:

# 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: Optional[TreeNode], low: int, high: int) -> int:
        # If root.val < low, go to its right subtree
        # If root.val > high, go to its left subtree
        # If root.val within range, update res. Go to both side

        # TC: O(n), n is total nodes, SC: O(1)
        if not root:
            return 0
        elif root.val < low:
            return self.rangeSumBST(root.right, low, high)
        elif root.val > high:
            return self.rangeSumBST(root.left, low, high)
        else:
            return root.val + self.rangeSumBST(root.left, low, high) + self.rangeSumBST(root.right, low, high)

Time Complexity: $O(n)$
Space Complexity: $O(1)$


BFS Solution:

# 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: Optional[TreeNode], low: int, high: int) -> int:
        # Run BFS to add all the sum, if node.val within bound

        # TC: O(n), n is total nodes, SC: O(n)
        deque = collections.deque([root])
        res = 0
        while deque:
            node = deque.popleft()
            if node.val >= low and node.val <= high:
                res += node.val
            if node.left:
                deque.append(node.left)
            if node.right:
                deque.append(node.right)
        return res

Time Complexity: $O(n)$
Space Complexity: $O(n)$


CC BY-NC-SABY: credit must be given to the creatorNC: Only noncommercial uses of the work are permittedSA: Adaptations must be shared under the same terms