1

こんにちは、n-ary ツリーを検索するためのこのコードがありますが、正しく動作しません。n4 と n5 を検索すると、n3 が返されます。何が問題なのですか? ここに画像の説明を入力

public FamilyNode findNodeByName(FamilyNode nodeName ){
       if(this.name.equals(nodeName.name)){
          // We found a node named nodeName, return it
          return this;
       } 
       // That's not me that you are looking for, let's see my kids

           for(FamilyNode child : this.children){
            if(child.findNodeByName(nodeName) != null) 
              return child;
                // We found what we are looking, just return from here
            //    return child;

       }
       // Finished looping over all nodes and did not find any, return null
       return null;
    }
4

1 に答える 1

1

その理由は、ノードが見つかったノードを返すためです。ノードが見つかったら、このノードを返す必要があり、 aFamilyNodeが見つかった場合の親ノードは found を返す必要がありますFamilyNode。変数で何が行われたかを確認しfoundます。

次のようなことをする必要があります:

FamilyNode found = child.findNodeByName(nodeName);
if(found != null) 
    return found;

メソッド全体は次のようになります。

public FamilyNode findNodeByName(FamilyNode nodeName ){
    if(this.name.equals(nodeName.name)){
        return this;
    } 
    for(FamilyNode child : this.children){
        FamilyNode found = child.findNodeByName(nodeName);
        if(found != null) 
            return found;
    }
    return null;
}
于 2012-07-07T07:50:17.057 に答える