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
将检查字符串是否相同。