Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package project2;
  2.  
  3. import java.util.Comparator;
  4.  
  5.  
  6. public class BinaryTree<E>
  7. {
  8.     Comparator<E> comp;
  9.     Node<E> head = new Node<E>(null);
  10.  
  11.     private class Node<T>
  12.     {
  13.         T content;
  14.         Node<T> left;
  15.         Node<T> right;
  16.  
  17.         public Node(T arg)
  18.         {
  19.             content = arg;
  20.         }
  21.  
  22.         boolean isEmpty()
  23.         {
  24.             return content == null;
  25.         }
  26.     };
  27.  
  28.     public BinaryTree(Comparator<E> arg)
  29.     {
  30.         comp = arg;
  31.     }
  32. @Deprecated
  33.  
  34.     public void delete(E arg)
  35.     {
  36.    
  37.     if (!contains(arg))
  38.             return;
  39.         Node<E> traverser = head;
  40.         Node<E> parentTraverser;
  41.         // search for the node
  42.         if (head.content.equals(arg))
  43.         {
  44.             head = null;
  45.            
  46.             return;
  47.         } else
  48.         {
  49.             parentTraverser = null;
  50.         }
  51.         while (true)
  52.         {
  53.             while (comp.compare(traverser.content, arg) < 0)
  54.             {
  55.                 parentTraverser = traverser;
  56.                 traverser = traverser.left;
  57.             }
  58.             while (comp.compare(traverser.content, arg) > 0)
  59.             {
  60.                 parentTraverser = traverser;
  61.                 traverser = traverser.right;
  62.             }
  63.             if (traverser.content.equals(arg))
  64.             {
  65.                 // node to be deleted is found !
  66.                 // start searching for the smalles subnode of the right tree
  67.                 if (traverser.right == null && traverser.left == null)
  68.                 {
  69.                     //traverser has no children the parent left || right should be set to zero
  70.                     if (parentTraverser.left.content.equals(arg))
  71.                     {
  72.                         parentTraverser.left = null;
  73.                         return;
  74.                     }
  75.                     if (parentTraverser.right.content.equals(arg))
  76.                     {
  77.                         parentTraverser.right = null;
  78.                         return;
  79.                     }
  80.                 }
  81.                 // if there is no right tree the continuation of the tree is in the left part
  82.                 if(traverser.right == null)
  83.                 {
  84.                     parentTraverser.left = traverser.left;
  85.                     return;
  86.                 }
  87.                 // normal situation
  88.                 // but the right tree's smalles element is the top of the right subtree
  89.                 if(traverser.right.left==null)
  90.                 {
  91.                     if(parentTraverser.left == traverser)
  92.                     {
  93.  
  94.                         parentTraverser.left = traverser.right;
  95.                         parentTraverser.left.left = traverser.left;
  96.                         return;
  97.                     }
  98.                     if(parentTraverser.right== traverser)
  99.                     {
  100.                     parentTraverser.right = traverser.right;
  101.                     parentTraverser.right.left = traverser.left;
  102.                     return;
  103.                     }
  104.                     }
  105.                
  106.                 Node<E>traverser2 = traverser.right;
  107.                 Node<E> ParentTraverser2= null;// if traverser doesn't have left this should be the parent traverser
  108.                
  109.                 while (traverser2.left != null)
  110.                 {
  111.                     ParentTraverser2 = traverser;
  112.                     traverser2 = traverser2.left;
  113.                 }
  114.                 //traverser2.left is null => smallest element in this subtree
  115.                 traverser2.left = traverser.left;
  116.                 ParentTraverser2.left = null;
  117.                 if (parentTraverser.left.content.equals(arg))
  118.                 {
  119.                     parentTraverser.left = traverser2;
  120.                     ParentTraverser2.right.left=traverser2.right;
  121.                     return;
  122.                 }
  123.                 if (parentTraverser.right.content.equals(arg))
  124.                 {
  125.                     parentTraverser.right = traverser2;
  126.                     ParentTraverser2.left=traverser2.right;
  127.                     return;
  128.                 }
  129.             }
  130.  
  131.         }
  132.     }
  133.  
  134.     void add(E arg)
  135.     {
  136.         if (head.isEmpty())
  137.             head.content = arg;
  138.         else
  139.         {
  140.             Node<E> traverser = head;
  141.             found: while (true)
  142.             {
  143.                 while (comp.compare(traverser.content, arg) < 0)
  144.                 {
  145.                     if (traverser.left == null)
  146.                     {
  147.                         traverser.left = new Node<E>(arg);
  148.                         break found;
  149.                     } else
  150.                     {
  151.                         traverser = traverser.left;
  152.                     }
  153.                 }
  154.                 while (comp.compare(traverser.content, arg) >= 0)
  155.                 {
  156.                     if (traverser.right == null)
  157.                     {
  158.                         traverser.right = new Node<E>(arg);
  159.                         break found;
  160.                     } else
  161.                     {
  162.                         traverser = traverser.right;
  163.                     }
  164.                 }
  165.             }
  166.  
  167.         }
  168.     }
  169.  
  170.     boolean contains(E arg)
  171.     {
  172.         Node<E> traverser = head;
  173.         if (head.isEmpty())
  174.             return false;
  175.         while (true)
  176.         {
  177.             while (comp.compare(traverser.content, arg) < 0)
  178.             {
  179.                 if (traverser.left == null)
  180.                 {
  181.                     return false;
  182.                 } else
  183.                 {
  184.                     traverser = traverser.left;
  185.                 }
  186.             }
  187.             while (comp.compare(traverser.content, arg) > 0)
  188.             {
  189.                 if (traverser.right == null)
  190.                 {
  191.                     return false;
  192.  
  193.                 } else
  194.                 {
  195.                     traverser = traverser.right;
  196.                 }
  197.             }
  198.             if (comp.compare(traverser.content, arg) == 0)
  199.                 return true;
  200.  
  201.         }
  202.     }
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement