2014-09-22 2 views
-3

트리 구조를 만들었지 만 디스플레이를 입력 할 때 아무 것도 표시되지 않는 문제가 있습니다. 어쩌면 루트가 여기에 null로 남아있을 수 있기 때문에 그 이유를 이해할 수 없습니다.Java에서 트리 구조를 만드는 방법은 무엇입니까?

public class Tree extends LLQueue { 

int data12; 
tree left; 
tree right; 


@Override 
public int getdata(){ 
    return data12; 
} 

@Override 
public void setdata(int data){ 
    this.data12 =data; 
} 
public tree getleft(){ 
    return left; 
} 
public void setleft(tree left){ 
    this.left=left; 
} 
public tree getright(){ 
    return right; 
} 
public void setright(tree right){ 
    this.right =right; 
} 

public static void main(String args[]) throws IOException, EmptyQueueException{ 
    BufferedReader br =new BufferedReader(new InputStreamReader(System.in)); 
    System.out.println("enter option "); 
    int n =Integer.parseInt(br.readLine()); 
    tree root =null; 
    do{ 
     System.out.println("\nQueue Operations"); 
     System.out.println("1. insert"); 
     System.out.println("2. display"); 

     int choice = Integer.parseInt(br.readLine()); 
     switch(choice){ 
      case 1: 

       System.out.println("insert here"); 
       int input =Integer.parseInt(br.readLine()); 
       insertintree(root,input); 
       break; 

      case 2: 
       System.out.println("result is"); 
       preorder(root); 

     } 
    }while(n!=0); 
} 
private static void insertintree(tree root, int input) throws EmptyQueueException { 
    LLQueue Q =new LLQueue(); 
    tree temp = null; 
    int temp1; 
    tree newnode =new tree(); 
    newnode.setdata(input); 
    newnode.setleft(null); 
    newnode.setright(null); 

if(newnode ==null){ 
    System.out.println("memory error"); 
    return; 
} 
if(root ==null){ 
    root =newnode; 
    return; 
} 
Q.enQueue(root.getdata()); 
while(!Q.isEmpty()){ 
     temp1=Q.deQueue(); 
     temp.setdata(temp1); 
     if(temp.getleft()!=null){ 
      tree temp2 =temp.getleft(); 

     Q.enQueue(temp2.getdata()); 
     } 
     else 
     { 
      temp.setleft(newnode); 
      Q.deQueue(); 
      return; 
     } 
      if(temp.getright()!=null){ 
      tree temp2 =temp.getright(); 

     Q.enQueue(temp2.getdata()); 
     } 
     else 
     { 
      temp.setright(newnode); 
      Q.deQueue(); 
      return; 
     } 
} 
Q.deQueue(); 

} 
private static void preorder(tree root) { 

    if(root!=null){ 

     System.out.println(root.getdata()); 
     preorder(root.getleft()); 
     preorder(root.getright()); 
    } 
} 
} 
+0

로 변경됩니다 ] (http://stackoverflow.com/help/mcve). –

+1

'root'는 값을 할당하지 않기 때문에 null이 유지됩니다. – azurefrog

+0

[is-java-pass-by-value-by-value] (http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass)를 살펴보십시오. -by-value)를 참조하십시오. – azurefrog

답변

0

문제는 루트로 설정하기 위해 생성 된 새 노드를 반환해야한다는 것입니다. 또는 당신은 또한 방법

private static Tree insertintree(tree root, int input) throws EmptyQueueException { 
    LLQueue Q =new LLQueue(); 
    tree temp = null; 
    int temp1; 
    tree newnode =new tree(); 
    newnode.setdata(input); 
    newnode.setleft(null); 
    newnode.setright(null); 
if(newnode ==null){ 
    System.out.println("memory error"); 
    return null; 
} 
    return newnode; 
} 

에 대한 루트 노드

사용이 코드를 세터 노출 될 수 있습니다 그리고 당신은 주요 코드는 [MCVE 게시, 더 빨리 더 나은 도움이 필요한

switch(choice){ 
     case 1: 

      System.out.println("insert here"); 
      int input =Integer.parseInt(br.readLine()); 
      Tree treeNode = insertintree(root,input); 
      if(treeNode!=null && root==null) {root = treeNode;} 
      break; 
관련 문제