如何计算BST中的水平总和

时间:2018-05-03 00:30:00

标签: java data-structures binary-tree

我一直在挠头几个小时,无法解决这个问题。我需要创建一个方法来计算树中节点级别的总和,"但是我的方法一直返回0。

我已经使用调试器多次执行它并且它开始正常但是当它到达方法的底部时它返回lvl并重置为0。

如果有人能帮助我理解为什么会这样,我会很感激。感谢

    public int sumOfLevels() {
    return sumOfLevels(_root, 0);
}

private int sumOfLevels(Node node, int lvl) {
    if (node == null)
        return lvl;
    sumOfLevels(node.right, lvl);
    lvl += findLevel(node.data);
    sumOfLevels(node.left, lvl);

    return lvl;
}

1 个答案:

答案 0 :(得分:0)

您不需要一个findLevel()函数来计算每个递归调用的级别,这是非常低效的。只需传递当前级别作为参数即可。像这样:

private int sumOfLevels(Node node, int currentlvl) {
    if (node == null)
        return 0;
    else {
        int sum = currentlvl;
        sum += sumOfLevels(node.right, currentlvl + 1);
        sum += sumOfLevels(node.left, currentlvl + 1);
        return sum;
    }
}