2013-10-30 13 views
0

저는 Java로 integer binary search tree을 만들려고했는데 어떤 이유로 새로운 노드를 추가하려고했습니다.노드가 트리에 추가되지 않았습니다.

여기는 NODE 클래스입니다. 여기

class NODE 
{ 
    NODE left = null, right = null; 
    int info; 
    public NODE(int x) 
    { 
     info = x; 
    } 
} 

와는 insert() 방법과 BST (이진 Seatch 트리) 클래스입니다. 내가 알아낼 수없는 이유

class BST 
{ 
    NODE tree = null; 
    public void insert(int x) 
    { 
     NODE node = new NODE(x); 
     NODE temp = tree; 
     while(true) 
     { 
      if(temp == null) 
      { 
       temp = node; 
       break; 
      } 
      else if(temp.info > x) temp = temp.left; 
      else temp = temp.right; 
     } 
    } 
    //other methods present here 
} 

insert() 방법은 잘못된 것입니다.

개체 treeinsert() 메서드가 호출 된 후에도 null을 전달합니다.

코드에서 뭔가 이상한 점을 발견 할 수 있습니까?

감사합니다.

+2

대문자로 시작하는 클래스의 이름을 지정하고 전체 대문자로하지 않으려는 클래스 - 최종 변수의 모든 대문자 값을 저장하십시오. –

+0

@ La-comadreja 그 점을 명심 해 두겠습니다. 감사. –

답변

4

사용 (대신 당신이 그랬던 것처럼 무한 루프를 이용하는)를 NODE 클래스의 재귀 insert 방법 :

public void insert(int x) { 
     if(x < this.info) { 
      if(this.left == null) 
       this.left = new NODE(x); 
      else 
       this.left.insert(x); 
     } 
     else { 
      if(this.right == null) 
       this.right = new NODE(x); 
      else 
       this.right.insert(x); 
     } 
    } 

그리고 다음 insert 방법을 것이다 당신의 BST 클래스 (단순히 다른 insert 메소드를 호출) :

public void insert(int x) { 
    if(tree == null) 
     tree = new NODE(x); 
    else 
     tree.insert(x); 
} 

는 재귀 적으로 더에 자신을 호출하지해야하기 때문에 주요 insert 방법은 NODE 클래스에 나무 안에 des.

+1

나는이 작업을 할 코드에 노력하고있다 – asaini007

+0

내 대답을 업데이트했다 ...이 작품 (이클립스에서 테스트). 그것에 대해 질문이 있으십니까? – asaini007

+0

감사합니다. @ asaini007. 이것은 나를 위해서도 효과가있었습니다. 어디서 잘못 됐는지 알고 싶습니까? –

0

insert() 메서드는 이미 노드로 선언 된 노드를 매개 변수로 호출하여 노드의 자식을 트리에 삽입해야합니다. 예 :

//Returns true/false depending on whether the insert is successful 
public boolean insert(int x, Node node, boolean leftChild) {  
    if (node == null) return false; 
    Node child = new Node(x); 
    if (leftChild) { 
     if (node.left != null) return false; 
     node.left = child; 
    } else { 
     if (node.right != null) return false; 
     node.right = child; 
    } 
    return true; 
} 
1

물론 트리는 null로 유지되며이 입력란에는 아무 것도 지정하지 않습니다. temp 이후 = 트리; 및 임시 = 노드; 임시 변통은 나무가 아니라 변화된다.

관련 문제