二叉树级别总和 -

时间:2016-05-12 00:37:05

标签: java binary-tree

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

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

此外,当返回travese函数时,它是否返回到父根或更像{for循环中的break;并且流程已停止?

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);
    }
}

1 个答案:

答案 0 :(得分:0)

首先,你没有返回求和的结果。你将不得不归还它。

然后,既然你写了“在目标级别”,我想你只需要在目标级别总结节点,而不是在级别之前的节点。

试试这个:

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;
}