题目描述:
给定二叉搜索树的根结点 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 * 10^4] 内
- 1 <= Node.val <= 10^5
- 1 <= low <= high <= 10^5
- 所有 Node.val 互不相同
题目分析:
二叉搜索树中序遍历是有序的.
笨比实现:
附上非递归中序遍历(未剪枝)
class Solution {
public int rangeSumBST(TreeNode root, int low, int high) {
if (root == null) {
return 0;
}
int sum = 0;
Stack<TreeNode> stack = new Stack<>();
while (true) {
if (root !=null) {
stack.push(root);
root = root.left;
} else if (stack.isEmpty()) {
return sum;
} else {
root = stack.pop();
if (root.val <= high && root.val >= low) {
sum += root.val;
}
root = root.right;
}
}
}
}
JAVA实现:
如上…
崇拜大佬思想的第十四天…
简单题我重拳出击!!! 哈哈~~~