我有一个包含多个节点的树。每个节点都有一个父节点(在根的情况下为null),一个名称(名称)和一个HashTable(子),它将子节点的名称映射到子节点对象。
给定节点的字符串名称,我想创建一个迭代树的方法来查找特定节点并返回它。如果该节点不存在则返回null。
我认为递归方法最好。到目前为止,我有这个:
public Node findNode(Node n, String s) {
if (n.name == s) {
return n;
} else {
for (Node child: n.children.values()) {
findNode(child, s);
}
}
}
我不确定在哪里放置null语句。
答案 0 :(得分:4)
如果孩子有,请将其归还。如果没有,则返回null
。
public Node findNode(Node n, String s) {
if (n.name == s) {
return n;
} else {
for (Node child: n.children.values()) {
Node result = findNode(child, s);
if (result != null) {
return result;
}
}
}
return null;
}
答案 1 :(得分:0)
这是Java 11+版本,使用Optional
搜索节点。
public Optional<Node> search (Node node, String needle) {
if (node.getValue().equals(needle)) {
return Optional.of(node);
} else {
for (var child : node.getChildren()) {
var result = search(child, needle);
if (result.isPresent()) {
return result;
}
}
}
return Optional.empty();
}