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

二叉树最大路径和中的递归调用解释

杨赞
2023-03-14

这就是问题所在:

给定一棵二叉树,求最大路径和。

对于这个问题,路径被定义为沿着父子连接从某个起始节点到树中任何节点的任何节点序列。路径必须至少包含一个节点,并且不需要通过根。

例如:给定下面的二叉树,

   1
  / \
 2   3

返回6。

此问题的递归解决方案如下所示:

int max = Integer.MIN_VALUE;

public int maxPathSum(TreeNode root) {
    helper(root);
    return max;
}

private int helper(TreeNode root) {
    if (root == null) return 0;
    int left = Math.max(helper(root.left), 0);
    int right = Math.max(helper(root.right), 0);
    max = Math.max(max, root.val + left + right);
    return root.val + Math.max(left, right);
}

我们为左子调用< code>helper,并检查左子是否大于零。

然后,我们为右孩子调用< code>helper,并检查右孩子是否大于零。

然后我们检查当前的max值和root.val左右-这也很清楚。

但是,在返回语句中,我们只有根值和其中一个子值的和。如果两个孩子都是阳性的,为什么我们只带一个孩子而不带两个?

共有1个答案

柯新翰
2023-03-14

递归方法不返回解本身,它只返回该部分的最大值。最终解在max变量中计算。

如果您检查maxPathSum方法,它会返回最大值,而不是从helper方法返回的值。

这是因为解决方案可能没有触及根,就像下面这样:

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

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

  • 我试图用python写一个递归函数,给定一个二叉树,一个节点返回一个包含节点方向的字符串。我已经接近了,但是我的最终返回语句给了我路径和节点(我不需要节点)即LRLR4。 这是我到目前为止的代码: 有没有一种方法可以在不使用字符串输出末尾的节点的情况下实现这一点? 编辑:添加了所有实际代码,并且有问题的树包含每个节点的单个字母字符串。

  • 有一个关于二叉树的基本java示例的问题:给定一个二叉树,查找路径中节点和等于给定目标数的所有路径。(有效路径是从根节点到任何叶节点。)。为什么我们需要

  • 我正在尝试使用Leetcode中的递归来解决路径和问题。我不擅长用递归解决问题。我看到了一些其他的解决方案,但我试图自己实现一个。我不明白我在我的方法中做错了什么。如果有人帮助我理解我做错了什么,我将非常感谢你的帮助。提前谢谢。 问题陈述:给定二叉树的根和整数targetSum,如果树有根到叶的路径,则返回true,这样沿路径的所有值相加等于targetSum。 叶是没有子节点的节点。 我的方法:

  • 主要内容:递归实现,非递归实现二叉树中序遍历的实现思想是: 访问当前节点的左子树; 访问根节点; 访问当前节点的右子树; 图 1 二叉树   以图  1 为例,采用中序遍历的思想遍历该二叉树的过程为: 访问该二叉树的根节点,找到 1; 遍历节点 1 的左子树,找到节点 2; 遍历节点 2 的左子树,找到节点 4; 由于节点 4 无左孩子,因此找到节点 4,并遍历节点 4 的右子树; 由于节点 4 无右子树,因此节点 2 的左子