2016-12-12 2 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); 
} 

노드 클래스 :

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

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

Node 클래스와 추가 기능을 게시 할 수 있습니까? –

+1

질문을 편집하고 [mcve] (http://stackoverflow.com/help/mcve)를 추가하십시오. 일어날 것으로 예상되는 것과 실제로 발생한 일을 설명하십시오. 현재, 재귀 적 반복 솔루션을 동시에 사용하려고하는 것으로 추측 할 수 있습니다. 재귀의 경우 파손 상태가 누락되었습니다. 반복 솔루션의 경우 while 조건이 false가되도록 일부 변수를 다시 할당해야합니다. –

+0

클래스 노드 { 노드가 왼쪽; 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); 
}