2013-02-18 5 views
0

Java에서 트리 및 노드 클래스와 SearchTree 클래스가 제공되는 바이너리 검색 트리 숙제를 통해 검색 및 삽입 메서드를 완성했습니다. 검색은 검색된 키에 해당하는 노드 값을 리턴합니다.자바 이진 검색 트리 - 삽입 방법이 잘못되었습니다.

Here은 Tree 클래스이고 here은 Node 클래스입니다. 내 검색 및 삽입 방법은 다음과 같습니다.

키가 0이되고 값 2가 Tree [Node [0,1, null, null]]로 삽입되면 테스트 결과가 Tree [Node [0,1, null, null]이됩니다. 올바른 Tree [Node [0,2, null, null]]보다. 나는 여기서 무엇을 이해하지 못 하겠는가?

public static Object search(Tree tree, int key) { 
    Node x = tree.getRoot(); 
    while (x != null) { 
     if (key == x.getKey()) { 
      return x.getValue(); 
     } 
     if (key < x.getKey()) { 
      x = x.getLeft(); 
     } else { 
      x = x.getRight(); 
     }    
    } 
    return null; 
} 

public static void insert(Tree tree, int key, Object value) { 
    if (tree.getRoot() == null) { 
     tree.setRoot(new Node(key, value)); 
    } 
    Node juuri = tree.getRoot(); 
    while (juuri != null) { 
     if (key == juuri.getKey()) { 
      return; 
     } else if (key < juuri.getKey()) { 
      if (juuri.getLeft() == null) { 
       juuri.setLeft(new Node(key, value)); 
       return; 
      } else { 
       juuri = juuri.getLeft(); 
      } 
     } else { 
      if (juuri.getRight() == null) { 
       juuri.setRight(new Node(key, value)); 
       return; 
      } else { 
       juuri = juuri.getRight(); 
      } 
     } 
    } 
} 

답변

0

글쎄, 내가보기에 문제는 트리의 키 값이 고유하다는 것입니다. 이 if 문에서 키가 이미 트리에 있음을 알게되면 노드를 추가하지 않고 insert 메서드를 종료합니다. 당신의 예에서

if (key == juuri.getKey()) { 
     return; 
} 

(I를 잘 이해하는 경우) 0 다시 0을 삽입 할 때 그래서 아무것도 변경되지 트리 이미 사용 중입니다. 예제를 기반으로, 키가 동일하면 노드에서 업데이트를 수행한다고 가정합니다. 그래서이 코드는 그렇게 할 것입니다.

if (key == juuri.getKey()) { 
    juuri.setValue(value); 
    return; 
} 
+0

아, 실종 된 바로 그 것. 감사합니다, 크게 감사드립니다. –