在不传递对象的情况下递归搜索树
Recursive search through tree without passing object
我正在尝试在非二叉树中搜索节点,但实际上没有将节点传递给搜索方法。
每个节点都有一个name
变量。 findChild()
方法采用一个名称,并在调用它的树中搜索以查找具有该名称的节点。
为了进行递归搜索,我在子节点上调用 findChild()
而不是将子节点传递给 findChild()
方法。打印语句告诉我该方法通过树向下传递,但是 result
变量在堆栈展开时设置为 null,因此该方法总是 returns 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;
}
我正在尝试在非二叉树中搜索节点,但实际上没有将节点传递给搜索方法。
每个节点都有一个name
变量。 findChild()
方法采用一个名称,并在调用它的树中搜索以查找具有该名称的节点。
为了进行递归搜索,我在子节点上调用 findChild()
而不是将子节点传递给 findChild()
方法。打印语句告诉我该方法通过树向下传递,但是 result
变量在堆栈展开时设置为 null,因此该方法总是 returns 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;
}