Java 不传递对象的递归树搜索

Java 不传递对象的递归树搜索,java,recursion,tree,stack-unwinding,Java,Recursion,Tree,Stack Unwinding,我试图在一个非二叉树中搜索一个节点,但实际上没有将节点传递给搜索方法 每个节点都有一个名称变量。findChild()方法获取一个名称,并在调用它的树中搜索以找到具有该名称的节点 为了进行递归搜索,我在子节点上调用findChild(),而不是将子节点传递给findChild()方法。Print语句告诉我,该方法通过树向下,但是result变量被设置为null,因为堆栈是非故意的,所以该方法总是返回null。我理解它为什么这样做,但我不知道如何解除这种类型的递归。感谢您的帮助 我的findChi

我试图在一个非二叉树中搜索一个节点,但实际上没有将节点传递给搜索方法

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

为了进行递归搜索,我在子节点上调用
findChild()
,而不是将子节点传递给
findChild()
方法。Print语句告诉我,该方法通过树向下,但是
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
块中丢弃
FileNode#findChild
的结果

试试这个

if (child.getName().equals(name)) {
    return child;
} else {
    FileNode childResult = child.findChild(name);
    if (childResult != null) {
        return childResult;
    }
}

下面的零钱有用吗?您的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;
}

首先,您应该始终使用
.equals
来比较字符串,而不是
=
=
将检查同一对象是否为引用,而
.equals
将检查字符串是否相同。