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"); } } }