2

我正在尝试在非二叉树中搜索节点,而实际上没有将节点传递给搜索方法。

每个节点都有一个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;
}
4

2 回答 2

1

您正在丢弃块FileNode#findChild中的结果else

尝试这个

if (child.getName().equals(name)) {
    return child;
} else {
    FileNode childResult = child.findChild(name);
    if (childResult != null) {
        return childResult;
    }
}
于 2016-10-20T14:01:21.497 回答
1

下面的小改动会有帮助吗?你的 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;
}
于 2016-10-20T14:02:56.743 回答