All pastes #734932 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-10-13 04:34 UTC
rendered paste body
import java.util.*;
 
public class ThreadedTree<E extends Comparable<E>>
{
  private ThreadedTreeNode<E> root;
  private ThreadedTreeNode<E> trailer;
  private ThreadedTreeNode<E> current;
        
  public ThreadedTree()
  {
      root = null;
  }
 
  public E findMin()
  {
        current = root;
      while(current.getLeft() !=null)
      {
          current = current.getLeft();
      }
      return current.getData();
  }
 
  public E findMax()
  {
      while(current.getRight() != null)
      {
          current = current.getRight();
      }
      return current.getData();
  }
 
  public void makeEmpty()
  {
      root = null;
  }
 
  public boolean isEmpty()
  {
      if(root==null)
          return true;
      else
          return false;
  }
 
        public void insertThreaded(E x)
        {
                if (root==null)
                {
                        root = new ThreadedTreeNode<E>(x);
                        return;
                }
                current = root;
                //
                //find appropriate null node to insert new node
                while(current != null)
                {
                        //initialize trailer to current
                        trailer = current;
                        //if x > current.data, move to right subtree
                        if (x.compareTo(current.getData())>0)
                        {
                                trailer = current;
                                current = current.getRight();
                        }
                        //if x < current.data, move to left subtree
                        else if (x.compareTo(current.getData())<0)
                        {
                                trailer = current;
                                current = current.getLeft();
                        }
                        //break loop if node x already exist in tree.
                        else
                        {
                                return;
                        }
                }
                //
                //current is null, compare x with trailer.data and insert x as child to trailer.
                //if x > trailer.data, move to right subtree
                if (x.compareTo(trailer.getData())>0)
                {
                        //create new node for x with null left reference and right thread from trailer
                        ThreadedTreeNode<E> node = new ThreadedTreeNode<E>(x, null, trailer.getRight());
                        //set trailer right reference to x
                        trailer.setRight(node);
                        //remove isThread flag from trailer
                        trailer.setIsThread(false);
                        
                }
                //if x < trailer.data, move to left subtree
                else if(x.compareTo(trailer.getData())<0)
                {
                        //create new node for x with null left reference and right thread from trailer
                        ThreadedTreeNode<E> node = new ThreadedTreeNode<E>(x, null, trailer);
                        node.setIsThread(true);
						//set trailer left reference to x
						
                        trailer.setLeft(node);
                        //remove isThread flag from trailer
                        trailer.setIsThread(false);
                }
                //do nothing if node x already exists in tree
                else
                {       
                return;
                }
        }
        
        public void inorderThreadedPrint()
        {
                current = root;
                while(current.getLeft() != null)
                {
                        current = current.getLeft();
                }
                do
                {
                        if(current.getIsThread()==true)
                        {
                                System.out.println(current.getData());
                                current = current.getRight();
                        }
                        else if(current.getIsThread()==false)
                        {
                                System.out.println(current.getData());
                                current = current.getRight();
                                while(current.getLeft() != null)
                                {
                                        current = current.getLeft();
                                }
                        }
                        
                } while(current!=null);
                
        }
        
        public void levelThreadedPrint()
        {
        }
 
}