示例#1
0
        public void Bst_Height_Test()
        {
            IBinarySearchTree tree = new Implementations.BinarySearchTree(50);

            // sub tree 1
            tree.BstInsert(72);
            tree.BstInsert(54);
            tree.BstInsert(76);
            tree.BstInsert(67);

            // sub tree 2
            tree.BstInsert(17);
            tree.BstInsert(12);
            tree.BstInsert(23);
            tree.BstInsert(9);
            tree.BstInsert(14);
            tree.BstInsert(19);

            tree.Height.Should().Be(3);
            tree.Left.Height.Should().Be(2);

            var balance = tree.Left.Height - tree.Right.Height;

            balance.Should().Be(0);
        }
示例#2
0
        public void AvlTree_RightLeftRotation_Test_1()
        {
            var tree1 = new Implementations.BinarySearchTree(36);
            var tree2 = tree1.BstInsert(67);
            var tree3 = tree1.BstInsert(42);

            var rotate = tree2.AvlRightLeftRotate();

            rotate.Key.Should().Be(36);
            rotate.Left.Should().BeNull();
            rotate.Right.Should().BeNull();
            rotate.Parent.Should().Be(tree3);

            var parent = rotate.Parent;

            parent.Key.Should().Be(42);
            parent.Left.Should().Be(tree1);
            parent.Right.Should().Be(tree2);
            parent.Parent.Should().BeNull();

            var right = parent.Right;

            right.Key.Should().Be(67);
            right.Left.Should().BeNull();
            right.Right.Should().BeNull();
            right.Parent.Should().Be(tree3);
        }
示例#3
0
        public void AvlTree_LeftRotation_Test_5()
        {
            var tree1 = new Implementations.BinarySearchTree(45);
            var tree2 = tree1.BstInsert(13);
            var tree3 = tree1.BstInsert(29);

            var rotate = tree2.AvlLeftRotate();

            rotate.Key.Should().Be(13);
            rotate.Left.Should().BeNull();
            rotate.Right.Should().BeNull();
            rotate.Parent.Should().Be(tree3);

            var parent = rotate.Parent;

            parent.Key.Should().Be(29);
            parent.Left.Should().Be(tree2);
            parent.Right.Should().BeNull();
            parent.Parent.Should().Be(tree1);

            var grandParent = parent.Parent;

            grandParent.Parent.Should().BeNull();
            grandParent.Right.Should().BeNull();
            grandParent.Left.Should().Be(tree3);
        }
示例#4
0
        public void AvlTree_LeftRotate_Simple_Test_1()
        {
            // this requires left rotation
            var tree1 = new Implementations.BinarySearchTree(1);
            var tree2 = tree1.BstInsert(2);
            var tree3 = tree1.BstInsert(3);

            var rotate = tree1.AvlLeftRotate();

            rotate.Parent.Key.Should().Be(2);
            rotate.Left.Should().BeNull();
            rotate.Right.Should().BeNull();

            var parent = rotate.Parent;

            parent.Key.Should().Be(2);
            parent.Left.Key.Should().Be(1);
            parent.Right.Key.Should().Be(3);
            parent.Parent.Should().BeNull();

            var parentRight = parent.Right;

            parentRight.Key.Should().Be(3);
            parentRight.Left.Should().BeNull();
            parentRight.Right.Should().BeNull();
            parentRight.Parent.Key.Should().Be(2);
        }
示例#5
0
        public void AvlTree_RightRotate_Test_1()
        {
            var tree  = new Implementations.BinarySearchTree(10);
            var tree2 = tree.BstInsert(9);
            var tree3 = tree.BstInsert(8);

            var rotate = tree.AvlRightRotate();

            rotate.Left.Should().BeNull();
            rotate.Right.Should().BeNull();
            rotate.Parent.Key.Should().Be(9);

            var parent = rotate.Parent;

            parent.Parent.Should().BeNull();
            parent.Key.Should().Be(9);
            parent.Right.Key.Should().Be(10);
            parent.Left.Key.Should().Be(8);

            var left = parent.Left;

            left.Left.Should().BeNull();
            left.Right.Should().BeNull();
            left.Parent.Key.Should().Be(9);
        }
示例#6
0
        public void Bst_Balance_Test()
        {
            var bst = new Implementations.BinarySearchTree(2);
            var b1  = bst.BstInsert(3);
            var b2  = bst.BstInsert(4);

            bst.Balance.Should().Be(2);
            b1.Balance.Should().Be(1);
            b2.Balance.Should().Be(0);
        }
示例#7
0
        public void Bst_Height_Simple_Test()
        {
            IBinarySearchTree root = new Implementations.BinarySearchTree(2);
            var b1 = root.BstInsert(3);
            var b2 = root.BstInsert(4);

            root.Height.Should().Be(2);
            b1.Height.Should().Be(1);
            b2.Height.Should().Be(0);
        }
示例#8
0
        public void Bst_Balance_Test_1()
        {
            IBinarySearchTree tree = new Implementations.BinarySearchTree(3);
            var v2 = tree.BstInsert(4);
            var v3 = tree.BstInsert(5);

            tree.Height.Should().Be(2);

            tree.Balance.Should().Be(2);
            v2.Balance.Should().Be(1);
            v3.Balance.Should().Be(0);
        }
示例#9
0
        public void Bst_Balance_Test_3()
        {
            IBinarySearchTree tree = new Implementations.BinarySearchTree(50);
            var v2 = tree.BstInsert(10);
            var v3 = tree.BstInsert(60);
            var v4 = tree.BstInsert(70);
            var v5 = tree.BstInsert(80);

            tree.Balance.Should().Be(2);
            v2.Balance.Should().Be(0);
            v3.Balance.Should().Be(2);
            v4.Balance.Should().Be(1);
        }
示例#10
0
        public void Bst_Balance_Test_2()
        {
            IBinarySearchTree tree = new Implementations.BinarySearchTree(50);
            var v2 = tree.BstInsert(11);
            var v3 = tree.BstInsert(9);
            var v4 = tree.BstInsert(6);
            var v5 = tree.BstInsert(8);

            tree.Balance.Should().Be(-4);
            v2.Balance.Should().Be(-3);
            v3.Balance.Should().Be(-2);
            v4.Balance.Should().Be(1);
            v5.Balance.Should().Be(0);
        }
示例#11
0
        public void AvlTree_LeftRotate_Simple_Test_4()
        {
            var tree1 = new Implementations.BinarySearchTree(1);
            var tree2 = tree1.BstInsert(2);

            var rotate = tree1.AvlLeftRotate();

            rotate.Key.Should().Be(1);
            rotate.Left.Should().BeNull();
            rotate.Right.Should().BeNull();
            rotate.Parent.Should().Be(tree2);

            tree2.Parent.Should().BeNull();
            tree2.Left.Should().Be(tree1);
            tree2.Right.Should().BeNull();
        }
示例#12
0
        public void AvlTree_RightRotate_Test_3()
        {
            var tree1 = new Implementations.BinarySearchTree(2);
            var tree2 = tree1.BstInsert(1);

            var rotate = tree1.AvlRightRotate();

            rotate.Parent.Should().Be(tree2);
            rotate.Left.Should().BeNull();
            rotate.Right.Should().BeNull();

            var parent = rotate.Parent;

            parent.Parent.Should().BeNull();
            parent.Left.Should().BeNull();
            parent.Right.Should().Be(tree1);
        }
示例#13
0
        public void Bst_Max_Test()
        {
            IBinarySearchTree tree = new Implementations.BinarySearchTree(50);

            // sub tree 1
            tree.BstInsert(72);
            tree.BstInsert(54);
            tree.BstInsert(76);
            tree.BstInsert(67);

            // sub tree 2
            tree.BstInsert(17);
            tree.BstInsert(12);
            tree.BstInsert(23);
            tree.BstInsert(9);
            tree.BstInsert(14);
            tree.BstInsert(19);

            tree.Max().Key.Should().Be(76);
        }
示例#14
0
        public void Bst_Successor_Test()
        {
            IBinarySearchTree tree = new Implementations.BinarySearchTree(50);

            // sub tree 1
            tree.BstInsert(72);
            tree.BstInsert(54);
            tree.BstInsert(76);
            tree.BstInsert(67);

            // sub tree 2
            tree.BstInsert(17);
            tree.BstInsert(12);
            tree.BstInsert(23);
            tree.BstInsert(9);
            tree.BstInsert(14);
            tree.BstInsert(19);

            tree.Successor(tree).Key.Should().Be(54);
            tree.Successor(tree.Left).Key.Should().Be(19);
        }
示例#15
0
        public void Bst_Get_Root_Test()
        {
            IBinarySearchTree tree = new Implementations.BinarySearchTree(50);

            // sub tree 1
            tree.BstInsert(72);
            tree.BstInsert(54);
            tree.BstInsert(76);
            tree.BstInsert(67);

            // sub tree 2
            tree.BstInsert(17);
            tree.BstInsert(12);
            tree.BstInsert(23);
            tree.BstInsert(9);
            tree.BstInsert(14);
            var last = tree.BstInsert(19);

            tree.GetRoot().Key.Should().Be(50);
            last.GetRoot().Key.Should().Be(50);
        }
示例#16
0
        public void Bst_Delete_Test()
        {
            IBinarySearchTree tree = new Implementations.BinarySearchTree(50);

            // sub tree 1
            tree.BstInsert(72);
            tree.BstInsert(54);
            tree.BstInsert(76);
            tree.BstInsert(67);

            // sub tree 2
            tree.BstInsert(17);
            tree.BstInsert(12);
            tree.BstInsert(23);
            tree.BstInsert(9);
            tree.BstInsert(14);
            tree.BstInsert(19);

            tree.BstDelete(tree.Right).Key.Should().Be(76);
            tree.Count.Should().Be(10);
            tree.Right.Key.Should().Be(76);
        }
示例#17
0
        public void Bst_Search_Test()
        {
            IBinarySearchTree tree = new Implementations.BinarySearchTree(50);

            // sub tree 1
            tree.BstInsert(72);
            tree.BstInsert(54);
            tree.BstInsert(76);
            tree.BstInsert(67);

            // sub tree 2
            tree.BstInsert(17);
            tree.BstInsert(12);
            tree.BstInsert(23);
            tree.BstInsert(9);
            tree.BstInsert(14);
            tree.BstInsert(19);

            tree.Search(14).Should().NotBeNull();
            tree.Search(14).Key.Should().Be(14);
            tree.Search(14).Parent.Key.Should().Be(12);
        }
示例#18
0
        public void AvlInsert_Test_1()
        {
            var tree1 = new Implementations.BinarySearchTree(1);
            var tree2 = tree1.AvlInsert(2);
            var tree3 = tree1.AvlInsert(3);

            tree1.Parent.Key.Should().Be(2);
            tree1.Left.Should().BeNull();
            tree1.Right.Should().BeNull();

            var parent = tree1.Parent;

            parent.Key.Should().Be(2);
            parent.Left.Key.Should().Be(1);
            parent.Right.Key.Should().Be(3);
            parent.Parent.Should().BeNull();

            var parentRight = parent.Right;

            parentRight.Key.Should().Be(3);
            parentRight.Left.Should().BeNull();
            parentRight.Right.Should().BeNull();
            parentRight.Parent.Key.Should().Be(2);
        }
示例#19
0
        public void Bst_Insert_Test()
        {
            IBinarySearchTree tree = new Implementations.BinarySearchTree(50);

            // sub tree 1
            var test = tree.BstInsert(72);

            tree.BstInsert(54);
            tree.BstInsert(76);
            tree.BstInsert(67);

            // sub tree 2
            tree.BstInsert(17);
            tree.BstInsert(12);
            tree.BstInsert(23);
            tree.BstInsert(9);
            tree.BstInsert(14);
            tree.BstInsert(19);

            tree.Key.Should().Be(50);
            tree.Right.Key.Should().Be(72);
            tree.Count.Should().Be(11);
            test.Parent.Key.Should().Be(50);
        }