当前位置: 首页 > 知识库问答 >
问题:

树中总和最高的路径

满俊楠
2023-03-14

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

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

我用了另一种方法来解决我的问题。尽管知道正确的解决方案可以很好地找到非二叉树的最大和路径。

共有2个答案

牧甫
2023-03-14

有关良好的解释,您可以从此处参考

谭骏
2023-03-14

你的错误应该是这样的:

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

你必须写:

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

你也不需要中间的“其他如果”,这是对于路径只有一个孩子的情况,“其他”在只有一个孩子的情况下也可以正常工作。

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

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

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

 类似资料:
  • 如何在二叉树中找到最小路径和,并打印路径?路径可以从ROOT节点到任何LEAF节点。我已经编写了C代码来查找最小和,但是在打印路径时遇到了问题。 参数列表中的未使用,有人能帮我打印路径和最小的路径吗?

  • 给了我一个问题,上面写着: 给定一个具有整数权值(正负两种)的连通有向图,发展一种求两顶点之间最短路径的算法。 我想我可以使用最小生成树算法,比如Kruskal的算法,然后用Dijkstra的算法来证明,因为在MST中,每个顶点只有一条内边,Dijkstra的算法即使在负权值下也能工作。 这听起来像是共食吗? 附注。我很难证明MST包含有向图的每个顶点的最短路径。

  • 这道题是 LeetCode 124 题。 给定一个非空二叉树,返回其最大路径和。注意,这里的“路径”并非自顶向下的单向路径,而是二叉树中任意连通的路径,可以在任一节点开始和结束。比如对于下图的二叉树,10->12->9 是一个最大路径: -9 / \ 1 12 / \ 10 9 分析 首先定义“端点”的概念。一条路径有两个端点:起点和终点。比如上述示例中,

  • 在一个具有不同正边的无向图中,是否可能有一个MST与最短路径树没有公共边? 我一直试图引出不同的例子,但似乎这是不可能的。最短路径树中的最短路径边似乎也应该包括在MST中。

  • (b)假设图的最小生成树是唯一的。无向图的最小生成树中一对顶点之间的路径一定是最短(最小权)路径吗? 我的回答是 (a)

  • 问题- 我的解决方案- 输出- 输入:[1,-2,-3,1,3,-2,null,-1]3输出:应为真:假 我真的不知道我在这方面出了什么问题。我尝试玩int和整数类型选项的结果,但它不工作。请帮忙。