2014-10-15 2 views
0
에서 왼쪽과 오른쪽 아이는

나는 사전 편찬 이진 트리를 구현, 그리고 난이 입력이있는 경우 나, 예를 들어출력 노드, 한 번에 자바

curent node data ; left child data ; right child data 

로 출력을 필요

banana apple curtain pumpkin egg 
을 왼쪽 또는 오른쪽 또는 둘 왼쪽 경우 "-1"출력됩니다

banana ; apple ; curtain 
apple ; -1 ; -1 
curtain ; -1 ; pumpkin 
pumpkin ; egg ; -1 
egg ; -1 ; -1 

: 이진 트리를 통해가는

나는 것으로 출력이 필요합니다 오른쪽 자식이 null입니다.

public void insert(String newData){ 
    root = insert2(newData, root); 

    } 

    public BTNode insert2(String s, BTNode n){ 
     if(n == null){ 
      return new BTNode(s); 
     } 

     if(s.compareTo(n.data) < 0){ 
      n.left = insert2(s, n.left); 
      if(n.right!=null) 
       System.out.println(n.data+" "+n.left.data+" "+n.right.data); 
      else System.out.println(n.data+" "+n.left.data +" "+ -1); 




     }else if(s.compareTo(n.data) > 0){ 
      n.right = insert2(s, n.right); 
      if(n.left!=null) 
       System.out.println(n.data+" "+n.left.data+" "+n.right.data); 
      else System.out.println(n.data+" "+ -1 +" "+n.right.data); 

     } 
     return n; 


    } 

내 시도의 출력은 다음과 같습니다 :

banana apple -1 
banana apple curtain 
curtain -1 pumpkin 
banana apple curtain 
pumpkin egg -1 
curtain -1 pumpkin 
banana apple curtain 

감사합니다

다음은이 작업을 수행하는 나의 시도이다.

+1

왜 insterting시 인쇄 중이십니까? 방문을위한 명령이 주어집니다. – luk32

답변

2

당신이 작업을 잘못 이해했다고 생각합니다. 완전히 구성된 이진 트리를 걸을 때 인쇄를해야합니다. 나무가 건설되는 동안 인쇄하려고하기 때문에 필요할 때 일부 데이터를 사용할 수 없습니다. 특히 이므로 모두 "banana" 또는 "curtain"을 첫 줄에 인쇄 할 수 없습니다.

insert2 방법의 모든 println 호출을 제거,이 문제를 해결

void printTree(BTNode node) 

메소드를 구현하고, 나무의 건설이 완료되면 호출합니다. printTree 구현은 간단합니다. 현재 노드와 두 개의 하위 노드의 레이아웃이있는 문자열을 인쇄 한 다음 왼쪽 하위 트리를 통과 한 다음 오른쪽 하위 트리가 있으면 그 하위 트리를 따라 이동합니다.