public void Test1(int[] bstArray, bool expectedResult)
        {
            BSTTreeNode root = BinarySearchTreeGenerator.GenerateFromArray(bstArray, false);

            BinarySearchTreeValidationSolution solution = new BinarySearchTreeValidationSolution();
            bool result = solution.Solve(root);

            result.Should().Be(expectedResult);
        }
Example #2
0
        public void Test1(int[] bstArray, int[] expectedResult)
        {
            BSTTreeNode root = BinarySearchTreeGenerator.GenerateFromArray(bstArray, false);

            FindModeInBinarySearchTreeSolution solution = new FindModeInBinarySearchTreeSolution();

            int[] result = solution.Solve(root);

            result.Should().NotBeNull();
            result.Length.Should().Be(expectedResult.Length);
            //Assuming that the expectedResult array will be sorted
            for (int i = 0; i < result.Length; i++)
            {
                result[i].Should().Be(expectedResult[i]);
            }
        }
Example #3
0
        public void MergeSingleNodeTrees()
        {
            const int firstRootValue  = 5;
            const int secondRootValue = 10;

            BSTTreeNode firstRoot  = new BSTTreeNode(firstRootValue);
            BSTTreeNode secondRoot = new BSTTreeNode(secondRootValue);

            BinaryTreeMergeSolution solution   = new BinaryTreeMergeSolution();
            BSTTreeNode             mergedRoot = solution.Solve(firstRoot, secondRoot);

            mergedRoot.Should().NotBeNull();
            mergedRoot.left.Should().BeNull();
            mergedRoot.right.Should().BeNull();
            mergedRoot.val.Should().Be(firstRootValue + secondRootValue);
        }
Example #4
0
        public void Test3(int k, int expectedResult)
        {
            int[] array =
            {
                45, 30, 46, 10, 36, -1, 49,  8, 24, 34, 42, 48, -1,  4,  9, 14, 25, 31, 35, 41, 43, 47, -1,  0,  6, -1, -1,
                11, 20, -1, 28, -1, 33, -1, -1, 37, -1, -1, 44, -1, -1, -1,  1,  5,  7, -1, 12, 19, 21, 26, 29, 32, -1, -1,
                38, -1, -1, -1,  3, -1, -1, -1, -1, -1, 13, 18, -1, -1, 22, -1, 27, -1, -1, -1, -1, -1, 39,  2, -1, -1,
                -1, 15, -1, -1, 23, -1, -1, -1, 40, -1, -1, -1, 16, -1, -1, -1, -1, -1, 17
            };

            BSTTreeNode root = BinarySearchTreeGenerator.GenerateFromArray(array);

            KthSmallestElementSolution solution = new KthSmallestElementSolution();
            int result = solution.Solve(root, k);

            result.Should().Be(expectedResult);
        }
Example #5
0
        public void Test1(int k, int expectedResult)
        {
            BSTTreeNode root     = new BSTTreeNode(3);
            BSTTreeNode rootLeft = new BSTTreeNode(1);

            root.left = rootLeft;
            BSTTreeNode rootRight = new BSTTreeNode(4);

            root.right = rootRight;
            BSTTreeNode rootLeftRight = new BSTTreeNode(2);

            rootLeft.right = rootLeftRight;

            KthSmallestElementSolution solution = new KthSmallestElementSolution();
            int result = solution.Solve(root, k);

            result.Should().Be(expectedResult);
        }
Example #6
0
        public void Merge_RootWithLeftChild_RootWithoutChildren()
        {
            const int firstRootValue  = 5;
            const int secondRootValue = 10;
            const int leftChildValue  = 2;

            BSTTreeNode firstRoot  = new BSTTreeNode(firstRootValue);
            BSTTreeNode secondRoot = new BSTTreeNode(secondRootValue);
            BSTTreeNode leftChild  = new BSTTreeNode(leftChildValue);

            firstRoot.left = leftChild;

            BinaryTreeMergeSolution solution   = new BinaryTreeMergeSolution();
            BSTTreeNode             mergedRoot = solution.Solve(firstRoot, secondRoot);

            mergedRoot.Should().NotBeNull();
            mergedRoot.left.Should().NotBeNull();
            mergedRoot.left.val.Should().Be(leftChildValue);
            mergedRoot.left.left.Should().BeNull();
            mergedRoot.left.right.Should().BeNull();
            mergedRoot.right.Should().BeNull();
            mergedRoot.val.Should().Be(firstRootValue + secondRootValue);
        }
Example #7
0
        public void MergeCustomTrees()
        {
            //create left tree
            BSTTreeNode leftTreeRoot  = new BSTTreeNode(1);
            BSTTreeNode leftTreeNode1 = new BSTTreeNode(3);

            leftTreeRoot.left = leftTreeNode1;
            BSTTreeNode leftTreeNode2 = new BSTTreeNode(2);

            leftTreeRoot.right = leftTreeNode2;
            BSTTreeNode lefTreeNode3 = new BSTTreeNode(5);

            leftTreeNode1.left = lefTreeNode3;

            //create right child
            BSTTreeNode rightTreeRoot  = new BSTTreeNode(2);
            BSTTreeNode rightTreeNode1 = new BSTTreeNode(1);

            rightTreeRoot.left = rightTreeNode1;
            BSTTreeNode rightTreeNode2 = new BSTTreeNode(3);

            rightTreeRoot.right = rightTreeNode2;
            BSTTreeNode rightTreeNode3 = new BSTTreeNode(4);

            rightTreeNode1.right = rightTreeNode3;
            BSTTreeNode rightTreeNode4 = new BSTTreeNode(7);

            rightTreeNode2.right = rightTreeNode4;

            BinaryTreeMergeSolution solution   = new BinaryTreeMergeSolution();
            BSTTreeNode             mergedRoot = solution.Solve(leftTreeRoot, rightTreeRoot);

            mergedRoot.Should().NotBeNull();
            mergedRoot.val.Should().Be(3);

            BSTTreeNode mergedRootLeft = mergedRoot.left;

            mergedRootLeft.Should().NotBeNull();
            mergedRootLeft.val.Should().Be(4);

            BSTTreeNode mergedRootRight = mergedRoot.right;

            mergedRootRight.Should().NotBeNull();
            mergedRootRight.val.Should().Be(5);

            BSTTreeNode mergedRootLeftLeft = mergedRootLeft.left;

            mergedRootLeftLeft.Should().NotBeNull();
            mergedRootLeftLeft.val.Should().Be(5);
            mergedRootLeftLeft.left.Should().BeNull();
            mergedRootLeftLeft.right.Should().BeNull();

            BSTTreeNode mergedRootLeftRight = mergedRootLeft.right;

            mergedRootLeftRight.Should().NotBeNull();
            mergedRootLeftRight.val.Should().Be(4);
            mergedRootLeftRight.left.Should().BeNull();
            mergedRootLeftRight.right.Should().BeNull();

            mergedRootRight.left.Should().BeNull();

            BSTTreeNode mergedRootRightRight = mergedRootRight.right;

            mergedRootRightRight.Should().NotBeNull();
            mergedRootRightRight.val.Should().Be(7);
            mergedRootRightRight.left.Should().BeNull();
            mergedRootRightRight.right.Should().BeNull();
        }