Sophia L.

asked • 11/28/22

Complete Binary Tree in Java (ArrayList implementation)

inOrder, postOrder, and preOrder seem to be printing extra numbers. Why is this happening?


import java.util.*;

public class CBT{

  private ArrayList tree;

  public CBT(){

tree = new ArrayList();

  }


  //traversals

  public void inOrder(){

   // left, root, right

   for(int i = 0; i < tree.size()-1; i++) {

   // find start position (left)

   int left = 2*i +1;

     if(tree.indexOf(left) != -1) System.out.println(tree.indexOf(left));

   // parent of left: index of (k-1/2) 

   int parent = (i-1)/2;

     if(tree.indexOf(parent) != -1 && tree.indexOf(parent) != 0) System.out.println(tree.indexOf(parent));

   

   // visit right subtree (2k+2)

   int right = 2*i+2;

     if(tree.indexOf(right) != -1) System.out.println(tree.indexOf(right));

   }

//   if(i*2+1<tree.size()) inOrder(i*2+1);

//     System.out.print(tree.get(i)+" ");

//     if (i*2+2<tree.size()) inOrder(i*2+2);

     

  }

  public void inorder(int n) {

   if(tree.size() < n) return;

   inorder(2*n+1);

   System.out.println(tree.get(n));   

   inorder(2*n+2);

  }

   

  public void preOrder() {

   // root, left, right

   if(tree.size() == 0) return; 

     for(int i =0; i <tree.size()-1 ; i++) {

     System.out.println(tree.indexOf(i));

   int left = 2*i + 1;

   if(tree.indexOf(left) != -1) System.out.println(tree.indexOf(left));

   int right = 2*i + 2;

   if(tree.indexOf(right) != -1) System.out.println(tree.indexOf(right));

     }

  }

  public void postOrder() {

   // left, right, root

   if(tree.size() == 0) return; 

   for(int i = 0; i < tree.size() -1; i++) {

   // find start position (leftmost )

   int left = 2*i +1;

   if(tree.indexOf(left) != -1) System.out.println(tree.indexOf(left));

   // go through parent to visit right (2k+2)

   int parent = (i-1)/2;

   int right = 2*parent +2;

   if(tree.indexOf(right) != -1) System.out.println(tree.indexOf(right));

   // go back to parent (k-1/2)

   if(tree.indexOf(parent) != -1) System.out.println(tree.indexOf(parent));

   }

  }

  public void breadthFirst() {

   // go left to right

   if(tree.size() == 0) return; 

   for (int i = 0; i < tree.size(); i++) {

   System.out.println(tree.get(i));

   }

  }


  //accessors

  public boolean contains(Object o) {

    if (tree.size() == 0) return false; 

    for(int i = 0; i < tree.size(); i++) {

    if(tree.get(i) == o) return true;

    }

    return false; 

  }


  //mutators

  public void add(Object o){

   tree.add(o);

  }

   

  public boolean remove(Object o){

   if(tree.size() == 0) return false;

   for(int i = 0; i < tree.size(); i++) {

if(tree.get(i) == o) {

tree.remove(o);

return true; 

}

}

   return false;

  }


  public static void main(String[] args){

   CBT cbt = new CBT();

int[] vals = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

for (int v: vals) cbt.add(v);

System.out.print("In order: ");

cbt.inOrder();

System.out.println();

System.out.print("Pre order: ");

cbt.preOrder();

System.out.println();

System.out.print("Post order: ");

cbt.postOrder();

System.out.println("Breadth First: ");

cbt.breadthFirst();

  }

}

1 Expert Answer

By:

Still looking for help? Get the right answer, fast.

Ask a question for free

Get a free answer to a quick problem.
Most questions answered within 4 hours.

OR

Find an Online Tutor Now

Choose an expert and meet online. No packages or subscriptions, pay only for the time you need.