public void RemoveNodeWithoutChild() { var root = new RedBlackTree.Node { Value = 2, Color = RedBlackTree.Color.Black, Left = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Value = 1 }, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Value = 3 } }; var tree = new RedBlackTree(root); tree.Remove(3); var expected = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 2, Left = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Value = 1 } }; Assert.Equal(expected, tree._root, new RedBlackTree.NodeEqualityComparer()); }
public void Case1Test() { var any = 0; var a = any; var b = any; var c = any; var d = any; var nd = new RedBlackTree.Node() { Value = a, Color = RedBlackTree.Color.Black, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Value = b, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = d }, Left = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = c } } }; var tree = new RedBlackTree(nd); tree.Case1(nd.Left, nd.Left.Sibling()); var expected = new RedBlackTree.Node() { Value = b, Color = RedBlackTree.Color.Black, Left = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Value = a, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = c }, }, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = d } }; Assert.Equal(expected, tree._root, RedBlackTree.NodeEqualityComparer.Comparer); }
public void Case1Test__Case5Test() { var nd = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 10, Left = new RedBlackTree.Node() { Value = 5, Color = RedBlackTree.Color.Black }, Right = new RedBlackTree.Node() { Value = 15, Left = new RedBlackTree.Node() { Value = 14, Color = RedBlackTree.Color.Red }, Right = new RedBlackTree.Node() { Value = 16, Color = RedBlackTree.Color.Red }, Color = RedBlackTree.Color.Black } }; var tree = new RedBlackTree(nd); tree.Remove(5); var expected = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 15, Right = new RedBlackTree.Node() { Value = 16, Color = RedBlackTree.Color.Black }, Left = new RedBlackTree.Node() { Value = 10, Color = RedBlackTree.Color.Black, Right = new RedBlackTree.Node() { Value = 14, Color = RedBlackTree.Color.Red } }, }; Assert.Equal(expected, tree._root, RedBlackTree.NodeEqualityComparer.Comparer); }
public void TestCase5__Case1() { var nd = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 2, Left = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 1, }, Right = new RedBlackTree.Node() { Value = 3, Color = RedBlackTree.Color.Black, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Value = 4, } } }; var tree = new RedBlackTree(nd); tree.Remove(3); var expected = new RedBlackTree.Node() { Value = 2, Color = RedBlackTree.Color.Black, Left = new RedBlackTree.Node() { Value = 1, Color = RedBlackTree.Color.Black, }, Right = new RedBlackTree.Node() { Value = 4, Color = RedBlackTree.Color.Black } }; Assert.Equal(expected, tree._root, RedBlackTree.NodeEqualityComparer.Comparer); }
public void Case8() { var any = 0; var a = any; var b = any; var c = any; var d = any; void ColorDepends(RedBlackTree.Color colorA, RedBlackTree.Color colorC) { var nd = new RedBlackTree.Node() { Color = colorA, Value = a, Left = new RedBlackTree.Node() { Value = b, Color = RedBlackTree.Color.Black, Left = new RedBlackTree.Node() { Value = d, Color = RedBlackTree.Color.Red }, Right = new RedBlackTree.Node() { Value = c, Color = colorC } } }; var tree = new RedBlackTree(nd); tree.Case8(nd.Right, nd.Right.Sibling()); var expected = new RedBlackTree.Node() { Color = colorA, Value = b, Left = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = d }, Right = new RedBlackTree.Node() { Value = a, Color = RedBlackTree.Color.Black, Left = new RedBlackTree.Node() { Value = c, Color = colorC }, } }; Assert.Equal(expected, tree._root, RedBlackTree.NodeEqualityComparer.Comparer); } ColorDepends(RedBlackTree.Color.Red, RedBlackTree.Color.Red); ColorDepends(RedBlackTree.Color.Red, RedBlackTree.Color.Black); ColorDepends(RedBlackTree.Color.Black, RedBlackTree.Color.Red); ColorDepends(RedBlackTree.Color.Black, RedBlackTree.Color.Black); }
public void DeleteRedNodeWith2Children__NotWorking() { var root = new RedBlackTree.Node { Value = 2, Color = RedBlackTree.Color.Black, Left = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 1 }, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Value = 4, Left = new RedBlackTree.Node() { Value = 3, Color = RedBlackTree.Color.Black }, Right = new RedBlackTree.Node() { Value = 5, Color = RedBlackTree.Color.Black, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Value = 6 } } } }; var tree = new RedBlackTree(root); tree.Remove(4); var expected = new RedBlackTree.Node { Value = 2, Color = RedBlackTree.Color.Black, Left = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 1 }, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Value = 5, Left = new RedBlackTree.Node() { Value = 3, Color = RedBlackTree.Color.Black }, Right = new RedBlackTree.Node() { Value = 6, Color = RedBlackTree.Color.Black, } } }; Assert.Equal(expected, tree._root, new RedBlackTree.NodeEqualityComparer()); }
public void Delete6() { var nd = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 4, Left = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 2, Left = new RedBlackTree.Node() { Value = 1, Color = RedBlackTree.Color.Black }, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 3 } }, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 6, Left = new RedBlackTree.Node() { Value = 5, Color = RedBlackTree.Color.Black }, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Value = 8, Left = new RedBlackTree.Node() { Value = 7, Color = RedBlackTree.Color.Black }, Right = new RedBlackTree.Node() { Value = 9, Color = RedBlackTree.Color.Black, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Value = 10 } } } } }; var tree = new RedBlackTree(nd); tree.Remove(6); var expected = new RedBlackTree.Node() { Value = 4, Color = RedBlackTree.Color.Black, Left = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 2, Left = new RedBlackTree.Node() { Value = 1, Color = RedBlackTree.Color.Black }, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 3 } }, Right = new RedBlackTree.Node() { Value = 8, Color = RedBlackTree.Color.Black, Right = new RedBlackTree.Node() { Value = 9, Color = RedBlackTree.Color.Black, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Value = 10 } }, Left = new RedBlackTree.Node() { Value = 5, Color = RedBlackTree.Color.Black, Right = new RedBlackTree.Node() { Value = 7, Color = RedBlackTree.Color.Red } } } }; Assert.Equal(expected, tree._root, RedBlackTree.NodeEqualityComparer.Comparer); }
public void DeleteNodeWithOneChild() { var root = new RedBlackTree.Node() { Left = new RedBlackTree.Node() { Value = 5, Color = RedBlackTree.Color.Black }, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 20, Right = new RedBlackTree.Node() { Value = 21, Color = RedBlackTree.Color.Red }, Left = new RedBlackTree.Node() { Value = 19, Color = RedBlackTree.Color.Red } }, Left = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 14 }, Value = 15, }, Value = 10, Color = RedBlackTree.Color.Black }; var tree = new RedBlackTree(root); tree.Remove(15); var expected = new RedBlackTree.Node() { Left = new RedBlackTree.Node() { Value = 5, Color = RedBlackTree.Color.Black }, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 21, }, Left = new RedBlackTree.Node() { Color = RedBlackTree.Color.Black, Value = 14, Right = new RedBlackTree.Node() { Color = RedBlackTree.Color.Red, Value = 19 } }, Value = 20, }, Value = 10, Color = RedBlackTree.Color.Black }; Assert.Equal(expected, tree._root, RedBlackTree.NodeEqualityComparer.Comparer); }