Showing posts with label Binary Tree Sort. Show all posts
Showing posts with label Binary Tree Sort. Show all posts

Wednesday, July 6, 2011

Program to Sort Binary Trees


import java.io.DataInputStream;   // to load DataInputStream class 


public class BinaryTreeSort
{




   static class TreeNode
   {
      // An object of type TreeNode represents one node
      // in a binary tree of integers.
      int item;         // The data in this node.
      TreeNode left;    // Pointer to left subtree.
      TreeNode right;   // Pointer to right subtree.
      TreeNode(int str)
      {
             // Constructor.  Make a node containing the specified integer.
         item = str;
      }
   }  // end nested class TreeNode


   
   static TreeNode root;  // Pointer to the root node in a binary tree.  This
                          // tree is used in this program as a binary sort tree.
                          // When the tree is empty, root is null.
   
   


   public static void main(String[] args)
   {
      
int x[]=new int[25];
int i,n = 0;
DataInputStream in = new DataInputStream(System.in); 


try
{
 System.out.print("Enter how many numbers to be sorted : ");
                 n = Integer.parseInt(in.readLine());
                  System.out.println("Enter "+n+" numbers in any order....");
                  for(i=0;i<n;i++)
                  {
                System.out.print("\t\tElement x["+(i+1)+"]=");
                   x[i] = Integer.parseInt(in.readLine());
                  }
}
catch(Exception e) {  System.out.println("I/O Error");   }




        for( i=0;i<n;i++)
        {
             treeInsert(x[i]);  // Add user's number to the tree.
             System.out.println("\nThe tree contains " + countNodes(root) + " items.");
             System.out.println("\nContents of tree:\n");
             treeList(root);
        }
            
   }  // end main()
   
   
   static void treeInsert(int newItem)
   {
          // Add the item to the binary sort tree to which the global
          // variable "root" refers.  (Note that root can't be passed as
          // a parameter to this routine because the value of root might
          // change, and a change in the value of a formal parameter does
          // not change the actual parameter.)
      if ( root == null )
      {
             // The tree is empty.  Set root to point to a new node containing
             // the new item.  This becomes the only node in the tree.
             root = new TreeNode( newItem );
             return;
      }
      TreeNode runner;  // Runs down the tree to find a place for newItem.
      runner = root;   // Start at the root.
      while (true)
     {
         if ( newItem<(runner.item))
         {
                  // Since the new item is less than the item in runner,
                  // it belongs in the left subtree of runner.  If there
                  // is an open space at runner.left, add a new node there.
                  // Otherwise, advance runner down one level to the left.
            if ( runner.left == null )
            {
               runner.left = new TreeNode( newItem );
               return;  // New item has been added to the tree.
            }
            else
               runner = runner.left;
         }
         else
        {
                  // Since the new item is greater than or equal to the item in
                  // runner it belongs in the right subtree of runner.  If there
                  // is an open space at runner.right, add a new node there.
                  // Otherwise, advance runner down one level to the right.
            if ( runner.right == null )
            {
               runner.right = new TreeNode( newItem );
               return;  // New item has been added to the tree.
            }
            else
               runner = runner.right;
        }
      } // end while
   }  // end treeInsert()
   
   
   static boolean treeContains( TreeNode root, int item )
  {
          // Return true if item is one of the items in the binary
          // sort tree to which root points.   Return false if not.
      if ( root == null )
      {
            // Tree is empty, so it certainly doesn't contain item.
         return false;
      }
      else if ( item ==(root.item) )
           {
              // Yes, the item has been found in the root node.
               return true;
           }
      else if ( item < (root.item) )
           {
               // If the item occurs, it must be in the left subtree.
               return treeContains( root.left, item );
           }
      else
      {
             // If the item occurs, it must be in the right subtree.
             return treeContains( root.right, item );
      }
   }  // end treeContains()
   


   static void treeList(TreeNode node)  // Inorder Traversal of tree
  {
      if ( node != null )
      {
          treeList(node.left);                   // Print items in left subtree.
          System.out.println("  " + node.item);  // Print item in the node.
          treeList(node.right);                  // Print items in the right subtree.
      }
   } // end treeList()
   


   static int countNodes(TreeNode node)
  {
         // Count the nodes in the binary tree to which node 
         // points.  Return the answer.
       if ( node == null )
       {
          // Tree is empty, so it contains no nodes.
          return 0;
       }
       else
       {
          // Add up the root node and the nodes in its two subtrees.
          int leftCount = countNodes( node.left );
          int rightCount = countNodes( node.right );
          return  1 + leftCount + rightCount;  
       }
   } // end countNodes()
   


} // end class BinaryTreeSort