private void DeletionCase1(Tree tree)
        {
            Tree sibiling = tree.Sibling();
            Tree parent   = tree.Parent;

            if (sibiling != null)
            {
                if (sibiling.Color == NodeColor.Black)
                {
                    if (sibiling.Left != null && sibiling.Left.Color == NodeColor.Red)
                    {
                        if (sibiling == parent.Left)
                        {
                            sibiling.Left.Color = NodeColor.Black;
                            RightRotate(parent);
                        }
                        else if (sibiling == parent.Right)
                        {
                            sibiling.Left.Color = NodeColor.Black;
                            RightRotate(sibiling);
                            LeftRotate(parent);
                        }
                        else
                        {
                            Console.WriteLine("10.40 Unexpected block");
                        }
                    }
                    else if (sibiling.Right != null && sibiling.Right.Color == NodeColor.Red)
                    {
                        if (sibiling == parent.Left)
                        {
                            sibiling.Right.Color = NodeColor.Black;
                            LeftRotate(sibiling);
                            RightRotate(parent);
                        }
                        else if (sibiling == parent.Right)
                        {
                            sibiling.Right.Color = NodeColor.Black;
                            LeftRotate(parent);
                        }
                        else
                        {
                            Console.WriteLine("10.50 Unexpected block");
                        }
                    }
                    else
                    {
                        sibiling.Color = NodeColor.Red;

                        if (parent.Color == NodeColor.Red)
                        {
                            parent.Color = NodeColor.Black;
                        }
                        else
                        {
                            DeletionCase1(parent);
                        }
                    }
                }
                else
                {
                    //sibiling is red,so parent must be black
                    if (sibiling == parent.Left)
                    {
                        sibiling.Color = NodeColor.Black;
                        if (parent == Root)
                        {
                            Console.WriteLine("10.60 Unexpected block");
                        }
                        parent.Color = NodeColor.Red;
                        RightRotate(parent);
                    }
                    else if (sibiling == parent.Right)
                    {
                        sibiling.Color = NodeColor.Black;
                        if (parent == Root)
                        {
                            Console.WriteLine("10.70 Unexpected block");
                        }
                        parent.Color = NodeColor.Red;
                        LeftRotate(parent);
                    }
                    else
                    {
                        Console.WriteLine("10.80 Unexpected block");
                    }
                }
            }
            else
            {
                if (tree == Root)
                {
                    tree.Color = NodeColor.Black;
                }
                else
                {
                    Console.WriteLine("10.30 Unexpected block");
                }
            }
        }