二叉树搜索范围和

题目要求

给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和——在L和R之间的数值。

二叉搜索树保证具有唯一的值。

示例 1:

输入:root = [10,5,15,3,7,null,18], L = 7, R = 15
输出:32

示例 2:

输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10
输出:23

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/range-sum-of-bst
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

递归法

我们对树进行深度优先搜索,对于当前节点 node,如果 node.val 小于等于 L,那么只需要继续搜索它的右子树;如果 node.val 大于等于 R,那么只需要继续搜索它的左子树;如果 node.val 在区间 (L, R) 中,则需要搜索它的所有子树,将其值累加。

public class Solution_1 {
    int ans;
    public int rangeSumBST(TreeNode root, int L,int R) {
        ans = 0;
        dfs(root, L, R);
        return ans;
    }

    public void dfs(TreeNode node, int L, int R) {
        if (node != null) {
            if (L <= node.val && node.val <= R)
                ans += node.val;
            if (L < node.val)
                dfs(node.left, L, R);
            if (node.val < R)
                dfs(node.right, L, R);
        }
    }
}

迭代法

public class Solution {
    public int rangeSumBST(TreeNode root, int L, int R) {
        int ans = 0;
        Stack<TreeNode> stack = new Stack();
        stack.push(root);
        while (!stack.isEmpty()) {
            TreeNode node = stack.pop();
            if (node != null) {
                if (L <= node.val && node.val <=R) ans += node.val;
                if (L < node.val) stack.push(node.left);
                if (node.val < R) stack.push(node.right);
            }
        }
        return ans;
    }
}

复杂度分析

  • 时间复杂度:O(N),其中N是树中的节点数目。

  • 空间复杂度:O(H),其中H是树的高度。


   转载规则


《二叉树搜索范围和》 cyyyys 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
删除最外层括号 删除最外层括号
题目要求有效括号字符串为空 (“”)、”(“ + A + “)” 或 A + B,其中 A 和 B 都是有效的括号字符串,+ 代表字符串的连接。例如,””,”()”,”(())()” 和 “(()(()))” 都是有效的括号字符串。 如果有
2019-09-04
下一篇 
java中Comparable和Comparator的区别 java中Comparable和Comparator的区别
Java中为我们提供了两种比较机制Comparable和Comparator,他们之间有什么区别和联系呢,我们一起来探讨一下。 Comparable接口 T代表了被比较对象的类型 Comparable是排序接口。若一个类实现了Compar
2019-09-02
  目录