Exemplo n.º 1
0
        public void InsertNode(RedBlackNode newNode)
        {
            RedBlackNode y = nil;
            RedBlackNode x = this.root;

            while (!IsNil(x))
            {
                y = x;

                if (newNode.data.CompareTo(x.data) < 0)
                {
                    x.numLeft++;
                    x = x.left;
                }

                else
                {
                    x.numRight++;
                    x = x.right;
                }
            }

            newNode.dad = y;

            if (IsNil(y))
            {
                this.root = newNode;
            }

            else if (newNode.data.CompareTo(y.data) < 0)
            {
                y.left = newNode;
            }

            else
            {
                y.right = newNode;
            }

            newNode.left  = nil;
            newNode.right = nil;
            newNode.cor   = RedBlackNode._RED;

            InsertFixUp(newNode);
        }
Exemplo n.º 2
0
        private void LeftRotateFixUp(RedBlackNode node)
        {
            if (IsNil(node.left) && IsNil(node.right.left))
            {
                node.numLeft       = 0;
                node.numRight      = 0;
                node.right.numLeft = 1;
            }

            else if (IsNil(node.left) && !IsNil(node.right.left))
            {
                node.numLeft  = 0;
                node.numRight = 1 + node.right.left.numLeft
                                + node.right.left.numRight;
                node.right.numLeft = 2 + node.right.left.numLeft
                                     + node.right.left.numRight;
            }

            else if (!IsNil(node.left) && IsNil(node.right.left))
            {
                node.numRight      = 0;
                node.right.numLeft = 2 + node.left.numLeft + node.left.numRight;
            }
        }
Exemplo n.º 3
0
 private bool IsNil(RedBlackNode node)
 {
     return(node == nil);
 }