public void DeleteNode_TryToDeleteLeafNode_ReturnsRootWithoutTheLeaf()
        {
            var root = GetTree();

            var d      = new DeleteNodeinA_BST();
            var result = d.DeleteNode(root, 4);

            result.Should().NotBeNull();
        }
        public void DeleteNode_TryToDeleteNodeWhichIsNotExist_ReturnsRoot()
        {
            var root = GetTree();

            var d      = new DeleteNodeinA_BST();
            var result = d.DeleteNode(root, 9);

            result.Should().NotBeNull();
        }
        public void DeleteNode_GivenAnullTree_ReturnsNull()
        {
            var root = (TreeNode)null;

            var d      = new DeleteNodeinA_BST();
            var result = d.DeleteNode(root, 5);

            result.Should().BeNull();
        }
        public void DeleteNode_TryToDeleteNodeWithoutRightChild_ReturnsRootWithoutTheNode()
        {
            var root = GetTree();

            root.left.right = null;

            var d      = new DeleteNodeinA_BST();
            var result = d.DeleteNode(root, 3);

            result.Should().NotBeNull();
        }
        public void Find2()
        {
            var root = GetTree();


            var d      = new DeleteNodeinA_BST();
            var parent = (TreeNode)null;
            var node   = d.Find(2, root, ref parent);

            parent.Should().NotBeNull();
            parent.val.Should().Be(3);
            node.Should().NotBeNull();
            node.val.Should().Be(2);
        }
        public void Find()
        {
            var root = GetTree();

            root.right       = new TreeNode(6);
            root.right.right = new TreeNode(7);


            var d      = new DeleteNodeinA_BST();
            var parent = (TreeNode)null;
            var node   = d.Find(5, root, ref parent);

            parent.Should().BeNull();
            node.Should().NotBeNull();
            node.val.Should().Be(5);
        }