Date and Time: Nov 27, 2024, 11:50 (EST)
Link: https://leetcode.com/problems/range-sum-of-bst
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.
-
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.valare unique.
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.
# 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:
Space Complexity:
# 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 resTime Complexity:
Space Complexity:

