2011-05-05 3 views
2

과제를하려고하는데 첫 번째 단계에서 문제가 있습니다.사전 주문 bitstring에서 이진 트리 만들기

https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B1DkmkmuB-leNDVmMDU0MDgtYmQzNC00OTdkLTgxMDEtZTkxZWQyYjM4OTI1&hl=en

샘플 입력된다 :의 출력을 제공

A0
0
A00
ab000

아래 링크 컨텍스트에 대한 할당인지 :

트리 1 :
잘못되었습니다!
트리 2 :
높이 : -1
경로 길이 : 0
완성 : 예
postorder :
나무 3 :
높이 : 0
경로 길이 : 전체 0
: 예
postorder : a
트리 4 :
높이 : 1
경로 길이 : 1
,210 전체 : 예
postorder : 바

내가 실제로 입력의 이진 트리를 구축에 부착하고 있기 때문에 할당에 진행 드릴 수 없습니다. 내가 선주문 방법 제대로 이진 트리를 짓고 있어요하는지 테스트하기 위해 노력하고

public class btsmall { 
    int k = 0; 
    char[] cArray; 

    public static void main(String[] args) throws IOException { 
     new btsmall().run(); 
    } 

    static class Node { 
     Node left; 
     Node right; 
     char value; 

     public Node(char value) { 
      this.value = value; 
     } 
    } 

    public void run() throws IOException { 
     String preorder; 
     InputStreamReader input = new InputStreamReader(System.in); 
     BufferedReader reader = new BufferedReader(input); 

     while ((preorder = reader.readLine()) != null) { 
      cArray = preorder.toCharArray(); 
      Node tree = null; 
      insert(tree); 
      preorder(tree); 
      k = 0; 
     } 
    } 

    public void insert(Node node) { 
     if (cArray[k] == (char) 0) { 
      node = new Node((char) 0); 
      node.left = node.right = null; 
      k++; 
     } else { 
      node = new Node(cArray[k]); 
      k++; 
      insert(node.left); 
      insert(node.right); 
     } 
    } 

    public void preorder(Node node) { 
     if (node != null) { 
      System.out.println(node.value + " "); 
      preorder(node.left); 
      preorder(node.right); 
     } 
    } 
} 

,하지만 난이 프로그램을 실행할 때마다이 보인다 : 지금까지 가지고 올 수 있었다 코드는 다음과 같습니다 어딘가에 무한 루프에 갇혀 있어야합니다. 아무도 그것을 일으키는 원인을 지적 할 수 있습니까? 그리고 실제로 이것으로 올바른 길을 가고 있습니까? 누군가이 특정 이진 트리를 구축하는 방법에 대해 어떤 힌트를 가지고 있습니까?

감사합니다.

+1

코드가 매우 혼란 스럽습니다. 먼저 코드를 정렬 해보십시오. insert() 메소드 - 노드가 덮어 쓰기 전용 일 때 매개 변수가되는 이유는 무엇입니까? 정수 0을 char로 캐스팅 하시겠습니까? '0'을 의미합니까? –

+2

질문을 삭제하지 마십시오 - "신경 쓰지 마세요. 나쁜 질문입니다. 답변을 주셔서 감사합니다." 의견이어야한다. –

답변

1

무한 루프가 아닙니다. System.in에서 입력을 기다리고 있습니다.

1

(char) 0은 유니 코드 U + 0000 (NUL)로 표시되는 문자입니다. 테스트에 '0' (U + 0030)을 사용하고 싶습니다.

문제 설정자는 주어진 선주문이 깊이 우선인지 너비 우선인지 명시하지 않았으므로 정확하게 트리를 다시 작성하는 방법을 알 수 없습니다.