java - 如何查找二叉树中的数字之和?

标签 java binary-tree

我需要在二叉树中搜索任何数字组合,这将给出我正在搜索的总和。 例如,对于具有数字:9,1,6,3,2,5的树,如果系统收到的总和为18,它将返回字符串“9,1,3,5”。请问我该怎么做。

该组合需要在 Pathway 中从根开始向下,该方法需要在 BackTracking 递归中工作

我写的代码是:

public String path(int sum)
    {
        return path(sum, root);
    }
    private String path(int sum, Node t)
    {
        if (t == null)
            return "";

        sum = sum - t.getNumber();

        if (sum == 0)
            return t.getNumber() + ", ";


        return path(sum, t.getLeftSon()) + path(sum, t.getRightSon()); 

    }

最佳答案

您的递归实现确实接近您的需要,但有一些事情需要一些调整。
首先,递归实现需要两件事才能工作:

  1. 基本案例,问题最终可以通过分而治之的方法达到
  2. 一般案例,用于将问题分成更小的部分,直到达到所需的基本案例
<小时/>



您遇到的问题是,当您递归时,您只打印使总和为零的最终节点。这是因为最后一次调用将递归回调用它的方法,其中总和大于零


如果该树到达叶子并且未找到总和,则该子树中不存在该总和。
返回“”;

else if总和在子树中找到
return t.getNumber() + ", ";

else我们还没有达到总和,并且还有更多的子节点。
路径(t.getleftSon()); 路径(t.getRightSon()); 返回 t.getNumber() + ", "


我还没有在 IDE 中测试过这个确切的代码,但逻辑应该是正确的

关于java - 如何查找二叉树中的数字之和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29085030/

相关文章:

python - 二叉树的所有元素列表

c - 在C中删除一个节点形成一个二叉搜索树

java - getApplicationContext() 不适用于使用 AsyncTask 进行 JobService 的 JobScheduler

java - 在 Java 中删除文件扩展名

C 结构、函数指针和头文件问题(不确定是哪个原因)

c++ - 插入时树中的遍历指针

在二叉树中查找一组 "k"标记顶点的算法,该算法最小化所有节点到标记祖先的距离

java - Android - BluetoothChat 示例 - 为什么他们在这种情况下使用同步?

java mail api, imap 文件夹 UIDNEXT 总是-1

Java joda api 不工作