Example #1
0
File: tree.cs Project: Squarion/ds
        public static void addPlayer(int playerNumber, int score)
        {
            Node x = new Node (score);
            insert(x);
            players [playerNumber] = x;
            x.setPlayerNumber (playerNumber);

            //printTree (root, 0, "center");
        }
Example #2
0
File: tree.cs Project: Squarion/ds
        public static void fixup(Node z)
        {
            while (z.getParent ().getColor () == false) { // parent van z is rood

                if (z.getParent ().Equals (z.getParent ().getParent ().getLeft ())) { // parent van z is een left child van grandparent
                    Node y = z.getParent ().getParent ().getRight (); // y is right node van grandparent van z
                    if (y.getColor () == false) { // y is rood
                        z.getParent ().setColor (true); // child van y moet rood zijn (parent van z)
                        y.setColor (true); // child van y moet rood zijn
                        z.getParent ().getParent ().setColor (false); // grandparent van z is rood
                        z = z.getParent ().getParent (); // z is nu grandparent van oude z
                    } else { // y is zwart
                        if (z.Equals (z.getParent ().getRight ())) { // z is een right node van parent
                            z = z.getParent (); // z is nu parent van oude z
                            leftRotate (z); // left rotate
                        }
                        z.getParent ().setColor (true); // parent van z moet zwart zijn
                        z.getParent ().getParent ().setColor (false); // grandparent van z moet rood zijn
                        rightRotate (z.getParent ().getParent ()); // right rotate
                    }
                } else { // parent van z is zwart (kan dus nil zijn)
                    Node y = z.getParent ().getParent ().getLeft (); // y is left node van grandparent van z
                    if (y.getColor () == false) { // y is rood
                        z.getParent ().setColor (true); // child van y moet rood zijn (parent van z)
                        y.setColor (true); // child van y moet rood zijn
                        z.getParent ().getParent ().setColor (false); // grandparent van z is rood
                        z = z.getParent ().getParent (); // z is nu grandparent van oude z
                    } else { // y is zwart
                        if (z.Equals (z.getParent ().getLeft ())) { // z is een left node van parent
                            z = z.getParent (); // z is nu parent van oude z
                            rightRotate (z); // left rotate
                        }
                        z.getParent ().setColor (true); // parent van z moet zwart zijn
                        z.getParent ().getParent ().setColor (false); // grandparent van z moet rood zijn
                        leftRotate (z.getParent ().getParent ()); // right rotate
                    }
                }
            }
            root.setColor (true);
        }
Example #3
0
File: tree.cs Project: Squarion/ds
 public void setRight(Node right)
 {
     this.right = right;
 }
Example #4
0
File: tree.cs Project: Squarion/ds
 public void setParent(Node parent)
 {
     this.parent = parent;
 }
Example #5
0
File: tree.cs Project: Squarion/ds
 public void setLeft(Node left)
 {
     this.left = left;
 }
Example #6
0
File: tree.cs Project: Squarion/ds
 public static Node successor(Node x)
 {
     if (!x.getRight().Equals(nil)) {
         return minimum (x.getRight());
     }
     Node y = x.getParent ();
     while (!y.Equals (nil) && x.Equals (y.getRight ())) {
         x = y;
         y = y.getParent ();
     }
     return y;
 }
Example #7
0
File: tree.cs Project: 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);
 }
Example #8
0
File: tree.cs Project: Squarion/ds
 public static void printTree(Node start, int level, string side)
 {
     if (!start.Equals(nil)) {
         Console.WriteLine ("(" + start.getKey() + " - " + start.getColor() + " - " + side + " - s: " + start.getSize() +  " - p: " + start.getPlayerNumber() + " [" + level + "])");
         printTree (start.getLeft (), level + 1, "left");
         printTree (start.getRight(), level + 1, "right");
     }
 }
Example #9
0
File: tree.cs Project: Squarion/ds
 public static void printPart(int playerNumber)
 {
     Node x = players[playerNumber];
     Node[] list = new Node[10];
     int i = 0;
     while (!(x = predecessor (x)).Equals(nil) && i < 4) {
         list [3 - i] = x;
         i++;
     }
     i = 0;
     x = players[playerNumber];
     list [4] = x;
     while (!(x = successor (x)).Equals(nil) && i < 5) {
         list [5 + i] = x;
         i++;
     }
     for (int n = 9; n >= 0; n--) {
         if (list[n] != null) {
             Console.WriteLine (list[n].getPlayerNumber());
         }
     }
 }
Example #10
0
File: tree.cs Project: Squarion/ds
 public static Node predecessor(Node x)
 {
     if (!x.getLeft().Equals(nil)) {
         return maximum (x.getLeft ());
     }
     Node y = x.getParent ();
     while (!y.Equals (nil) && x.Equals (y.getLeft ())) {
         x = y;
         y = y.getParent ();
     }
     return y;
 }
Example #11
0
File: tree.cs Project: Squarion/ds
 public static Node minimum(Node x)
 {
     while (!x.getLeft().Equals (nil)) {
         x = x.getLeft ();
     }
     return x;
 }
Example #12
0
File: tree.cs Project: Squarion/ds
 public static Node maximum(Node x)
 {
     while (!x.getRight().Equals(nil)) {
         x = x.getRight ();
     }
     return x;
 }
Example #13
0
File: tree.cs Project: 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);
        }