Easy
,Tree
,Binary Tree
,DFS
,Binary Search Tree
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:
Node.val
<= 105low
<= high
<= 105Node.val
are unique.
function rangeSumBST(root, low, high) {
if (root === null) return 0;
if (root.val < low) return rangeSumBST(root.right, low, high);
if (root.val > high) return rangeSumBST(root.left, low, high);
return root.val + rangeSumBST(root.left, low, high) + rangeSumBST(root.right, low, high);
}
function rangeSumBST(root, low, high) {
let sum = 0;
const stack = [root];
while (stack.length > 0) {
const node = stack.pop();
if (node === null) continue;
if (node.val >= low && node.val <= high) sum += node.val;
if (node.val > low) stack.push(node.left);
if (node.val < high) stack.push(node.right);
}
return sum;
}
多寫一個非遞迴的版本
Marsgoat Dec 7, 2022
# 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 not root: return 0
elif low <= root.val <= high:
return root.val + self.rangeSumBST(root.left, low, high) + self.rangeSumBST(root.right, low, high)
else:
return self.rangeSumBST(root.left, low, high) + self.rangeSumBST(root.right, low, high)
# 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:
stack = [root]
res = 0
while stack:
node = stack.pop()
if low <= node.val <= high:
res += node.val
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return res
Kobe Dec 7, 2022
public class Solution {
public int RangeSumBST(TreeNode root, int low, int high) {
if (root == null) return 0;
if (root.val < low) {
return RangeSumBST(root.right, low, high);
}
if (root.val > high) {
return RangeSumBST(root.left, low, high);
}
return root.val + RangeSumBST(root.left, low, high) + RangeSumBST(root.right, low, high);
}
}
Jim Dec 7, 2022