java - 通过树递归搜索而不传递对象

标签 java recursion tree stack-unwinding

我试图在非二叉树中搜索节点,而不实际将节点传递给搜索方法。

每个节点都有一个name变量。 findChild() 方法采用一个名称,并在调用它的树中搜索以查找具有该名称的节点。

为了进行递归搜索,我在子节点上调用 findChild(),而不是将子节点传递给 findChild() 方法。打印语句显示该方法通过树向下,但当堆栈展开时,result 变量被设置为 null,因此该方法始终返回 null。我明白它为什么这样做,但我不明白如何展开这种类型的递归。如有任何帮助,我们将不胜感激!

我的findChild()方法:

public FileNode findChild(String name) {
    FileNode result = null;
        for (FileNode child : this.getChildren()) {
            if (child.getName() == name) {
                return child;
            } else {
                child.findChild(name);
            }
        }
    return result;
}

最佳答案

下面的小改动会有帮助吗?您的 else 条件永远不会分配值。

public FileNode findChild(String name) {
    FileNode result = null;
        for (FileNode child : this.getChildren()) {
            if (child.getName() == name) {
                result = child;
                break;
            } else {
                result = child.findChild(name);
                if (result != null)
                    break;
            }
        }
    return result;
}

关于java - 通过树递归搜索而不传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40156565/

相关文章:

Java邮件发送器发送重复的电子邮件

java - SpringValidator(net.sf.oval): Recursive Error Reporting

algorithm - 从最低共同祖先重建树的算法名称?

java - HashMap Java 无法显示多个值

java - 为什么在 Java EE 安全性中名称为 "realm"和 "principal"?

java - 制作正方形网格时我缺少什么?

python - 在 Python 中迭代 N 个维度

c# - 递归类 C#

tree - LISP 编程 - 计算树节点的函数

java - 具有递归的链表的链表