예제 #1
0
파일: tree.cs 프로젝트: Squarion/ds
 public static void rightRotate(Node x)
 {
     Node y = x.getLeft();
     x.setLeft (y.getRight ());
     if (!y.getRight ().Equals (nil)) {
         y.getRight ().setParent (x);
     }
     y.setParent (x.getParent ());
     if (x.getParent ().Equals (nil)) {
         root = y;
     } else if (x.Equals (x.getParent ().getRight ())) {
         x.getParent ().setRight (y);
     } else {
         x.getParent ().setLeft (y);
     }
     y.setRight (x);
     x.setParent (y);
     y.setSize (x.getSize ());
     x.setSize (x.getRight ().getSize () + x.getLeft ().getSize () + 1);
 }
예제 #2
0
파일: tree.cs 프로젝트: Squarion/ds
        public static void insert(Node z)
        {
            Node y = nil;
            Node x = root;
            // path from root to correct node
            while (!x.Equals(nil)) { // x is niet nil
                y = x;
                if (z.getKey () < x.getKey ()) { // key van z is kleiner dan key van x -> ga naar links
                    x = x.getLeft ();

                } else { // key van z is groter dan key van x -> ga naar rechts
                    x = x.getRight();
                }
                y.incrementSize ();
            }
            z.setParent (y); // y (laatste node in juiste tak) is parent van z
            if (y.Equals(nil)) { // y (parent van z) is nil -> z is de root
                root = z;
            } else if (z.getKey () < y.getKey ()) { // key van z is kleiner dan key van y -> z is left node van y
                y.setLeft (z);
            } else {  // key van z is groter dan key van y -> z is right node van y
                y.setRight (z);
            }
            z.setLeft (nil); // z heeft geen kinderen
            z.setRight (nil); // z heeft geen kinderen
            z.setColor(false); // z is rood
            z.setSize(1);
            fixup (z);
        }