Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.02 KB | None | 0 0
  1. import datastructures.BinarySearchTree;
  2.  
  3. public class SplayTree <E extends Comparable<? super E>> extends BinarySearchTree<E> {
  4.  
  5.     public SplayTree(){
  6.         super();
  7.     }
  8.  
  9.     private class Entry{
  10.         public E      element;
  11.         public Entry  left, right, parent;
  12.  
  13.         public Entry(E element, Entry  left, Entry  right, Entry  parent) {
  14.             this.element = element;
  15.             this.left    = left;
  16.             this.right   = right;
  17.             this.parent  = parent;
  18.         }
  19.  
  20.         public  Entry(E element, Entry parent) {
  21.             this( element, null, null, parent );
  22.         }
  23.     }
  24.  
  25.     /* Rotera 1 steg i högervarv, dvs
  26.         x'                 y'
  27.        / \                / \
  28.       y'  C   -->        A   x'
  29.      / \                    / \  
  30.     A   B                  B   C
  31.      */
  32.     private void zag(Entry x) {
  33.         Entry   y = x.left;
  34.         E    temp = x.element;
  35.  
  36.         x.element = y.element;
  37.         y.element = temp;
  38.         x.left    = y.left;
  39.  
  40.         if ( x.left != null ){
  41.             x.left.parent   = x;
  42.         }
  43.  
  44.         y.left    = y.right;
  45.         y.right   = x.right;
  46.  
  47.         if ( y.right != null ){
  48.             y.right.parent  = y;
  49.         }
  50.  
  51.         x.right   = y;
  52.     }
  53.  
  54.     /* Rotera 1 steg i vänstervarv, dvs
  55.         x'                 y'
  56.        / \                / \
  57.       A   y'  -->        x'  C
  58.          / \            / \  
  59.         B   C          A   B  
  60.      */
  61.     private void zig( Entry x ) {
  62.         Entry  y  = x.right;
  63.         E temp    = x.element;
  64.  
  65.         x.element = y.element;
  66.         y.element = temp;
  67.         x.right   = y.right;
  68.  
  69.         if ( x.right != null ){
  70.             x.right.parent  = x;
  71.         }
  72.  
  73.         y.right   = y.left;
  74.         y.left    = x.left;
  75.  
  76.         if ( y.left != null ){
  77.             y.left.parent   = y;
  78.         }
  79.  
  80.         x.left    = y;
  81.     }
  82.    
  83.     /*
  84.     x                  z
  85.      \                  \
  86.       y      =>          y
  87.        \                  \
  88.         z                  x
  89.     */
  90.    
  91.     private void zigZig(Entry x){
  92.         Entry y = x.right;
  93.        
  94.        
  95.     }
  96.  
  97.     /* Rotera 2 steg i vänstervarv, dvs
  98.         x'                  z'
  99.        / \                /   \
  100.       A   y'   -->       x'    y'
  101.          / \            / \   / \
  102.         z   D          A   B C   D
  103.        / \  
  104.       B   C  
  105.      */
  106.     private void zigZag(Entry x){
  107.         Entry  y  = x.right,
  108.         z  = x.right.left;
  109.         E      e  = x.element;
  110.         x.element = z.element;
  111.         z.element = e;
  112.         y.left    = z.right;
  113.  
  114.         if ( y.left != null ){
  115.             y.left.parent = y;
  116.         }
  117.  
  118.         z.right   = z.left;
  119.         z.left    = x.left;
  120.  
  121.         if ( z.left != null ){
  122.             z.left.parent = z;
  123.         }
  124.         x.left    = z;
  125.         z.parent  = x;
  126.     }
  127.  
  128.     /* Rotera 2 steg i högervarv, dvs
  129.         x'                  z'
  130.        / \                /   \
  131.       y'  D   -->        y'    x'
  132.      / \                / \   / \
  133.     A   z'             A   B C   D
  134.        / \  
  135.       B   C  
  136.     */
  137.     private void zagZig(Entry x){
  138.         Entry   y = x.left,
  139.         z = x.left.right;
  140.         E       e = x.element;
  141.         x.element = z.element;
  142.         z.element = e;
  143.         y.right   = z.left;
  144.        
  145.         if (y.right != null){
  146.             y.right.parent = y;
  147.         }
  148.        
  149.         z.left    = z.right;
  150.         z.right   = x.right;
  151.        
  152.         if ( z.right != null ){
  153.             z.right.parent = z;
  154.         }
  155.        
  156.         x.right   = z;
  157.         z.parent  = x;
  158.     }
  159.  
  160.  
  161.  
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement