【问题标题】:Binary Tree Level Sum -二叉树级别总和 -
【发布时间】:2016-05-12 00:37:05
【问题描述】:

一个基本的 Java 示例:给定一个二叉树和一个整数,它是目标级别的深度。 并计算目标层级节点的总和。

我将函数中的值添加到左右节点。为什么这个解决方案在这种情况下不起作用,谁能帮忙解释一下?

另外,当travese 函数返回时,它是返回到父根还是更像break; for 循环并且流停止了?

private int sum;

public int levelSum(TreeNode root, int level) {
    sum = 0;
    traverse(root, 1, level, 0);
    return sum;
}

public void traverse(TreeNode root, int depth, int level, int sum) {
    if(root == null) {
        return;
    }

    if(depth == level) {
        return;
    }

    if(root.left != null) {
        traverse(root.left, depth + 1, level, sum + root.left.val);
    }

    if(root.right != null) {
        traverse(root.right, depth + 1, level, sum + root.right.val);
    }
}

【问题讨论】:

  • 除了初始化之外,您永远不会在levelSum 例程中分配给sum。而traverse 返回void,因此您无法将中间sum 值传递回调用堆栈。您可能应该将这两个例程合并为一个返回 int 的函数。
  • 我在您发布的代码中没有看到for 循环,所以我无法回答您的最后一个问题。

标签: java binary-tree


【解决方案1】:

首先,你没有返回求和的结果。您必须退货。

那么,既然你写的是“在目标层级”,我猜你只需要总结目标层级的节点,而不是层级之前的节点。

试试这个:

public int levelSum(TreeNode root, int level) {
    return traverse(root, 1, level);

}

public void traverse(TreeNode root, int depth, int level){
    int sum = 0;

    if(root == null || depth > level){
        return 0;
    }

    if (depth == level) sum += root.val;

    if(root.left != null) {
        sum += traverse(root.left, depth + 1, level);
    }

    if(root.right != null) {
        sum += traverse(root.right, depth + 1, level);
    }

    return sum;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 2014-05-27
    • 1970-01-01
    • 2013-01-23
    • 2016-09-07
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多