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

计算二叉树中的路径和

古起运
2023-03-14

试图计算二叉树中从根到叶的路径和。似乎不起作用,doesIt的值变为true,但由于它是递归的,所以当堆栈弹出时,它会切换回false。我不知道怎么修。如何更改代码,使doesIt的值更改为true后,它会一直向上传播?

考虑树:[5,4,8,11, null, null, null,7,2]无序

5有两个孩子4和8,4有一个孩子11,8没有孩子

hasPathSum(根,22)

public boolean hasPathSum(TreeNode root, int sum) {
    boolean doesIt = false;
    if (root != null)
    {
        doesIt = pathSum(root, sum, 0, doesIt);
    }
    return doesIt;
}

private static boolean pathSum(TreeNode root, int sum, int sumSoFar, boolean doesIt)
{
    if (root.left == null && root.right == null)
    {
        if (sumSoFar+root.val == sum)
        {
            doesIt = true;
            return doesIt;
        }
        return doesIt;
    }

    if (root.left != null)
    {
        pathSum(root.left, sum, sumSoFar+root.val,doesIt);
    }

    if (root.right != null)
    {
        pathSum(root.right, sum, sumSoFar+root.val,doesIt);
    }

    return doesIt;
}

共有1个答案

西门磊
2023-03-14

您只需将通过调用方法给出的值扔给子对象。我稍微将您的代码改写为:

private static boolean pathSum(TreeNode root, final int sum, int sumSoFar) {
    if (root == null) return false;
    if (root.left == null && root.right == null) return sumSoFar + root.val == sum;
    return pathSum(root.left, sum, sumSoFar + root.val) || pathSum(root.right, sum, sumSoFar + root.val);
}

这是基本的递归:对于null节点,答案定义为false,叶是另一个角落情况,试图在两个分支之一取得成功的一般情况。

另外,从问题和方法签名中不太清楚您想要实现什么,但我想您应该检查是否存在从根到任何具有给定总和的叶的路径

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

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

  • 我需要关于计算二叉树高度的理论的帮助,通常是符号。 我看过以下文章: 计算二叉树的高度 其中一个帖子给出了以下符号: 高度(节点)=最大值(高度(节点L)、高度(节点R))1 假设我有以下二叉树: 因此,我是否计算左节点(8)和右节点(42)的最大值,然后加上1?我不太明白这种符号是如何计算树的高度的。

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

  • NowCoder 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 下图的二叉树有两条和为 22 的路径:10, 5, 7 和 10, 12 解题思路 // java private ArrayList<arraylist> ret = new ArrayList<>(); public Arr

  • 上面的函数将包含二叉树每个叶的路径的数组附加到全局数组。 代码工作正常,但我想删除全局变量,并使函数返回数组。我怎么能那样做?