-3

I am creating a tree structure but problem is that on entering display it doesn't display anything. Maybe because the root remains null here, I can't understand why.

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());
    }
}
}
halfer
  • 19,824
  • 17
  • 99
  • 186
Kirti Chaturvedi
  • 1,245
  • 13
  • 24

1 Answers1

0

Your problem is you need to return the new node that is created to set it as root. Or you could also expose an setter for root node

Use this code for you method

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;
 }

And you code in main will change to

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;
StackFlowed
  • 6,664
  • 1
  • 29
  • 45