2011-12-23 11 views
9

非バイナリツリー(任意のノードがn個の子を持つことができる)でアイテムを検索し、直ちに再帰を終了したいと考えています。問題のノードは、リーフだけでなく、任意のノードにすることができます。非バイナリツリー内のノードの再帰的検索

これは私のコードですが、完全な検索はできません。

private nNode recursiveSearch(data gi,nNode node){ 
     if (node.getdata()==gi) 
      return node; 
     nNode[] children = node.getChildren(); 
     if (children.length>0) 
     for (int i = 0; i < children.length; i++) {   
      return recursiveSearch(gi, children[i]); 
     } 
     return null; 
} 

NNODEは含まれています

ArrayList mChildren ;(それの子)
とデータオブジェクトを。

+0

を何あなたの 'nNode'が見えますか? – fge

答えて

23

最初の子を探索した後で終了しないでください。 forループの前にはifステートメントは必要ありません。あなたのコードで

private nNode recursiveSearch(data gi,nNode node){ 
    if (node.getdata()==gi) 
     return node; 
    nNode[] children = node.getChildren(); 
    nNode res = null; 
    for (int i = 0; res == null && i < children.length; i++) {   
     res = recursiveSearch(gi, children[i]); 
    } 
    return res; 
} 
5

recursiveSearch(GI、子供[i]は)私+ 1は検索されませんその後、nullを返した場合、変更:

private nNode recursiveSearch(data gi,nNode node){ 
     if (node.getdata()==gi) 
      return node; 
     nNode[] children = node.getChildren(); 
     nNode temp; 
     if (children.length>0) 
     for (int i = 0; i < children.length; i++) {   
      temp = recursiveSearch(gi, children[i]); 
      if(temp!=null) 
       return temp; 
     } 
     return null; 
} 
関連する問題