2016-06-21 13 views
-4

私は、バイナリツリー内にノードが見つかるはずのメソッドについて質問があります。このツリーには、valueが含まれています。以下の方法は機能しません。その理由はなぜですか。バイナリツリー内のノードを見つける

public Node search(Node node, int value) { 
    if(node.value == value) return node; 
    if(node.left != null) search(node.left, value); 
    if(node.right != null) search(node.right, value); 
    return null; 
} 

問題は、実際には、ツリー内の所与valueを持つノードが存在する場合、この方法は時々nullを返すことです。何故ですか?

+0

伝えるコードが不十分です。バイナリツリーがジェネリックを使用していないのはなぜですか?任意の参照型を格納できると便利です。 – duffymo

答えて

5

あなたは再帰呼び出しによって返された値を無視してはならない、とあなたのrootを使うべきではない方法ではなく、渡さnode

public Node search(Node node, int value) { 
    if(node.value == value) return node; 
    Node found = null; 
    if(node.left != null) 
     found = search(node.left, value); 
    if(found == null && node.right != null) 
     found = search(node.right, value); 
    return found; 
} 
0

エランが言ったように、あなたの通話はif文が上がらない経由で検索しますあなたのsearch関数が想定されているように、ノードを返すことはありません。あなたの現在のコードが動作する唯一の状況は、最初のノードnn.value == valueを満たすかどうかです。

関連する問題