2016-12-12 12 views
0

バイナリ検索したいが、プログラムは無限ループに入っている。 プログラムプリント:無限ループに入るバイナリ検索

値= 10

値= 10

値=私はこの問題を解決するにはどうすればよい10

...

public static void search(Node root, int data){ 
    while(root.data != data){ 
     if(data < root.data){ 
      search(root.left, data); 
     } 
     else if(data > root.data){ 
      search(root.right, data); 
     } 
    } 
    System.out.println("Value = " + root.data); 
} 

public static void main(String[] args) { 
    Node root = null; 
    root = add(root, 15); 
    root = add(root, 3); 
    root = add(root, 10); 
    root = add(root, 20); 
    root = add(root, 30); 
    search(root, 10); 
} 

Nodeクラス:

class Node { 
    Node left; 
    int data; 
    Node right; 

    Node(int data) { 
     left = null; 
     this.data = data; 
     right = null; 
    } 
} 
+0

Nodeクラスとadd関数も投稿できますか? –

+1

質問を編集して[mcve](http://stackoverflow.com/help/mcve)を追加してください。何が起こると予想され、実際に何が起こったのかを説明してください。現在、私はあなたが再帰と反復のソリューションを同時に使用しようとしていると推測できます。再帰のために、あなたは破壊条件を逃しています。反復解法の場合、while条件がfalseになるようにいくつかの変数を再割り当てする必要があります。 –

+0

クラスNode { ノードが残っています。 intデータ。 ノード権利。 ノード(intデータ){ left = null; this.data = data; right = null; } } – myvalley

答えて

1

明らかな理由は、あなたがこのwhileループでroot変更されていないので、それは永遠にループしているということです!あなたは葉のノードに向かって下がることを意図したかもしれません。

while(root.data != data){ //<<<<<<root not changing 
    if(data < root.data){ 
     search(root.left, data); 
    } 
    else if(data > root.data){ 
     search(root.right, data); 
    } 
} 
0

これを試してください。うまくいきます。

public static void search(Node root, int data) 
{ 
    if(!root) 
     return; 
    else if(root.data == data) 
    { 
     System.out.println("Value = " + root.data); 
    } 
    else if(data < root.data) 
     search(root.left, data); 
    else 
     search(root.right, data); 
}