我有一个非二进制树,其节点按以下方式定义:
public class TreeNode{
private String label;
private TreeNode[] children;
public TreeNode(String label){
this.label = label;
children = new TreeNode[9]
}
因此每个节点都有一个标签和一个大小为9的数组,它包含9个子节点。 现在在我的树类中,我想定义一个find方法,它将找到一个具有特定标签的节点。这就是我能想到的:
public TreeNode find(String label, TreeNode node) {
TreeNode result = null;
if (node.getLabel().equals(label)) {
return node;
} else {
if (node.hasChildren()){
for (int i = 0; i< node.getChildren().length; i++){
if (node.getChildren()[i].getLabel().equals(label)) {
result = node.getChildren()[i];
break;
else
return find(label, node.getChildren()[i];
}
return result;
}
这个问题就是它每次都会更深入,而不会查看我提供给方法的“节点”的兄弟姐妹。
我确信解决方案是微不足道的,但我似乎无法抓住它。
有一个similar question here,我认为他们的问题也很相似,但我似乎无法将提供的解决方案转换为我的应用程序。
我错过了什么?谢谢你的帮助!
答案 0 :(得分:2)
你不应该在return
循环中使用for
而不检查递归调用的返回值。此外,无条件地对循环中的所有项应用递归调用。
for (int i = 0; i < node.getChildren().length; i++){
result = find(label, node.getChildren()[i];
if(result != null) {
return result;
}
}