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

时间:2016-10-20 13:57:21

标签: 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;
}

2 个答案:

答案 0 :(得分:1)

您在FileNode#findChild区块

中丢弃了else的结果

试试这个

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

答案 1 :(得分:0)

以下小改动会有帮助吗?你的其他条件永远不会分配值。

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;
}