【问题标题】:Wrong recursion when trying to find Range Sum of BST尝试查找 BST 的范围和时递归错误
【发布时间】:2019-09-11 18:08:18
【问题描述】:

我正在练习算法并解决这个经典问题。有很多解决方案,我正在尝试使用 Javascript 来解决它。我将在下面发布问题和我的内容:

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

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

Example 1:
Input: root = [10,5,15,3,7,null,18], L = 7, R = 15 Output: 32
var rangeSumBST = function(root, L, R) {
    let result = 0;

    if (root === null) return 0;
    if (root.val >= L && root.val <= R) {
        result += root.val
    }
    rangeSumBST(root.left, L, R)
    rangeSumBST(root.right, L, R)

    return result
};
// Output is 10 instead of 32

【问题讨论】:

  • 这棵树长什么样子?请添加树。
  • 树看起来像这样:[10,5,15,3,7,null,18],所以 10 是父节点,5 和 15 作为子节点。 3 和 7 是 5 的孩子,null 和 18 是 15 的孩子
  • 是树遍历。但是树代码呢?
  • 不是 100% 确定,这是来自 leetcode 的问题:leetcode.com/problems/range-sum-of-bst 我意识到我没有添加任何内容,这就是问题所在。

标签: javascript binary-search-tree


【解决方案1】:

您正在执行rangeSumBST(root.left, L, R) 而不使用它们的结果。最后只得到第一个节点值。改为使用:

var rangeSumBST = function(root, L, R) {
    let result = 0;

    if (root === null) return 0;
    if (root.val >= L && root.val <= R) {
        result += root.val
    }
    let left = rangeSumBST(root.left, L, R)
    let right = rangeSumBST(root.right, L, R)

    return result + left + right;
};

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 2014-06-30
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-09
    相关资源
    最近更新 更多