【问题标题】:Path with highest sum in a Tree树中总和最高的路径
【发布时间】:2015-09-29 06:31:25
【问题描述】:

我必须找到从根节点到叶节点的最大总和。 我想出了以下节点,但它没有给出正确的输出。树可以有两个以上的子节点(它不是二叉树)。

public static long findBestPath(Path path) {
    long max = 0, sum = 0;
    if (path.getChildren().size() == 0)
        return path.getValue();
    else if (path.getChildren().size() == 1)
        return path.getValue() + findBestPath(path.getChildren().get(0));
    else {
        for (int i = 0; i < path.getChildren().size(); i++) {
            sum = path.getChildren().get(i).getValue() + findBestPath(path.getChildren().get(i));
            if (sum > max)
                max = sum;
        }
        return max;
    }
}

我使用了另一种方法来解决我的问题。虽然最好知道正确的解决方案来找到非二叉树的最大和路径。

【问题讨论】:

    标签: java tree


    【解决方案1】:

    你的错误应该在这一行:

    sum = path.getChildren().get(i).getValue() + findBestPath(path.getChildren().get(i));

    你必须写:

    sum = path.getValue() + findBestPath(path.getChildren().get(i));

    另外你不需要中间的“else if”,这是路径只有一个孩子的情况,“else”也适用于只有一个孩子。

    所以你的代码应该是这样的:

    public static long findBestPath(Path path) {
        long max = 0, sum = 0;
        if (path.getChildren().size() == 0)
            return path.getValue();
        else {
            for (int i = 0; i < path.getChildren().size(); i++) {
                sum = path.getValue() + findBestPath(path.getChildren().get(i));
                if (sum > max)
                    max = sum;
            }
            return max;
        }
    }
    

    我希望它有效。

    另一种解决方案,它返回 child(i) 的总和 + child(i) 的孩子的最大总和(如果我理解你的话),将是:

    public static long findBestPath(Path path) {
        long max = 0, sum = 0;
        if (path.getChildren().size() == 0)
            return 0;
        else {
            for (int i = 0; i < path.getChildren().size(); i++) {
                sum = path.getChildren().get(i).getValue() + findBestPath(path.getChildren().get(i));
                if (sum > max)
                    max = sum;
            }
            return max;
        }
    }
    

    只有当所有值都是正数时,两者都有效。

    【讨论】:

    • 这不起作用,因为 child(i) 的总和 + child(i) 的孩子的最大总和应该是返回的值。
    • 我不明白您所说的“child(i) 的总和 + child(i) 的孩子的最大总和应该是返回的值”是什么意思。
    • 我希望我理解你的正确,其他代码适合你。
    【解决方案2】:

    为了更好的解释,你可以参考here

    【讨论】:

    • 抱歉,无法投票。我的声望不够。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2018-08-10
    • 2016-03-17
    • 1970-01-01
    • 2016-08-03
    相关资源
    最近更新 更多