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

使用递归检查树路径中是否存在和

谢鸿飞
2023-03-14

我试图解决树中的一个问题,我们必须检查完整路径(从根到叶)是否会导致求和值(由用户给出)。我成功地做到了这一点,下面是代码

    public boolean hasPathSum(TreeNode root, int sum) {
        if(root==null)
        {
            return false;
        }
        sum = sum - root.val;
        if(sum==0 && root!=null && root.left==null && root.right==null)
        {
            return true;
        }
        boolean b1 = hasPathSum(root.left,sum);
        boolean b2 = hasPathSum(root.right,sum);
        return b1||b2;
    }
}

我理解代码的主要问题是,当我们向下移动root.left的递归函数时,总和会发生变化,当总和在<--plhd中传递时,总和的值会发生变化--1/>语句。我们希望在第二个函数中传递的总和值是那个给定点的值(由于总和通过第一个函数传递,应该会改变),但是这段代码似乎仍然正常工作。

共有3个答案

和丰羽
2023-03-14

您的“sum”(方法签名的形式参数)被声明为基元类型。这将确保其值仅存在于当前堆栈帧中。如果沿着递归链进行更改,则该更改将局限于发生递归调用的帧。

每个方法调用“看到”它自己的sum变量的副本和值,直到该方法返回一个值,并将更新后的值传递给递归链。

潘鸿文
2023-03-14

递归的美妙之处在于,当堆栈展开时,它将具有与当前方法相同的值。

一堆就像一堆。因此,顶部的方法就是当前正在执行的方法。每当执行一个新方法时,先前的方法及其状态都会被冻结。因此,在下面的堆栈描述中,当调用Latest Call时,它下面的方法没有变化。

hasPathSum(root.left.left, sum - root.val - root.left.val); --> Latest Call
hasPathSum(root.left, sum - root.val); --> Mid Call
hasPathsum(root, sum); --> First Call
濮阳和泰
2023-03-14

sumint的类型被声明为原语。在Java中,当使用args调用方法时,该方法将获得args值的副本。基元类型将获得值的副本,但类实例(对象)方法将获得对象引用的副本。

 类似资料:
  • 我正在尝试编写下一个程序: 仅包含正整数的二维方形数组。每个单元格只能在路径上出现一次,编写一个递归布尔静态方法,该方法接受一个包含数字(大于零)和任何正和的二维mat数组作为参数,该方法作为与mat大小相同的二维数组的参数给出,该方法应检查数组中是否有一个和为和的路径。否则,将返回false值,并使用路径标记路径和和:最初,当路径数组作为参数传递时,其所有单元格在方法末尾包含和,如果mat数组和

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

  • 我试图使用DFS解决一个图形问题,但遇到了一堵墙。这是我在Python3中的实现。unvisited是一个整数数组,start和end是unvisited中的整数,path是一个空数组,在DFS运行时填充,edges是一个边字典。 目标是找到一条从开始到结束访问unvisted中所有int的路径。因此,我遇到了递归的问题(我认为),因为在路径错误的情况下,我不想返回任何东西;相反,我希望DFS继续

  • 你们好,伙计们,我正在试图理解我如何看到二叉树是否平衡。我试图打印出cout语句,以便进一步理解它,但运气不好。 算法的想法是,如果它返回-1,它就不平衡,如果它返回其他任何东西,它是平衡的。 然而,我并没有真正理解这个算法是如何工作的。但是我想知道的一些事情是; 我的困惑点在于以下代码行: 如果 (根 == 空) 返回 0; 当它返回 0 时会发生什么,何时达到 0?它只是为了防止递归继续转到未

  • 我正在创建一个Java程序,在该程序中,我将文件上传到特定路径上的服务器。我将用于。 所以,在上传文件之前,我想检查给定的目录是否存在于服务器上。 如何检查路径是否存在? 注意:我正在客户端上执行代码,该客户端将检查服务器上是否存在远程目录。所以请不要建议使用。

  • 嗨~我被这个问题困住了。有人请帮帮我!!!! 问题是程序会要求用户输入一个4到20之间的数字来决定迷宫的大小。它稍后会要求用户逐行输入迷宫的内容并将其存储到2D bool数组中(true表示阻塞,false表示清除)。然后程序从左上角开始,并尝试找到一条通往右下角的路径(可以向右、向左、向上、向下移动)。此时,程序还应该维护另一个char数组,该数组记录找到的路径(如果有的话)并在处理结束时打印出