public void addDataToRoot_LeftRight()
        {
            BinaryTree one = new BinaryTree(5);

            one.addToTree(2);
            one.addToTree(7);

            Assert.IsNotNull(one.Root.Left);
            Assert.IsNotNull(one.Root.Right);

            Assert.AreEqual(one.Root.Left.Data, 2);
            Assert.AreEqual(one.Root.Right.Data, 7);

            Assert.IsNull(one.Root.Left.Left);
            Assert.IsNull(one.Root.Right.Right);
        }
        public void PreOrderTraversal()
        {
            //        4
            //       / \
            //      2   5
            //     / \   \
            //    1   3   7
            //           / \
            //          6   8

            BinaryTree aTree = new BinaryTree(4);

            aTree.addToTree(5);
            aTree.addToTree(2);
            aTree.addToTree(7);
            aTree.addToTree(3);
            aTree.addToTree(6);
            aTree.addToTree(1);
            aTree.addToTree(8);
            aTree.preOrder();

            int[] expected = { 4, 2, 1, 3, 5, 7, 6, 8 };
            int   index    = 0;

            foreach (int actual in aTree.Output)
            {
                Assert.AreEqual(expected[index++], actual);
            }
        }
        public void findNonExistentData()
        {
            BinaryTree aTree = new BinaryTree(4);

            aTree.addToTree(2);
            aTree.addToTree(6);
            aTree.addToTree(1);
            aTree.addToTree(3);
            aTree.addToTree(5);
            aTree.addToTree(8);
            aTree.addToTree(7);

            Assert.IsFalse(aTree.dataExist(10));
        }
        public void removeNode_LeftLeaf()
        {
            //        4
            //       / \
            //      2   5
            //     / \   \
            //    1   3   7
            //           / \
            //          6   8
            BinaryTree aTree = new BinaryTree(4);

            aTree.addToTree(5);
            aTree.addToTree(2);
            aTree.addToTree(7);
            aTree.addToTree(3);
            aTree.addToTree(6);
            aTree.addToTree(1);
            aTree.addToTree(8);

            Assert.IsTrue(aTree.remove(1), "Remove should return true for found node");

            //        4
            //       / \
            //      2   5
            //     / \   \
            //        3   7
            //           / \
            //          6   8


            int[] expected = new[] { 3, 2, 6, 8, 7, 5, 4 };
            int   index    = 0;

            aTree.postOrder();
            foreach (int actual in aTree.Output)
            {
                Assert.AreEqual(expected[index++], actual);
            }
        }
        public void remove_CurrentRight_HasLeft()
        {
            //         4
            //       /    \
            //      2      6
            //     / \    / \
            //    1   3  5   8
            //              /
            //             7

            BinaryTree aTree = new BinaryTree(4);

            aTree.addToTree(2);
            aTree.addToTree(6);
            aTree.addToTree(1);
            aTree.addToTree(3);
            aTree.addToTree(5);
            aTree.addToTree(8);
            aTree.addToTree(7);

            Assert.IsTrue(aTree.remove(6), "Remove should return true for found node");

            //         4
            //       /    \
            //      2      7
            //     / \    / \
            //    1   3  5   8


            int[] expected = new[] { 1, 3, 2, 5, 8, 7, 4 };
            int   index    = 0;

            aTree.postOrder();
            foreach (int actual in aTree.Output)
            {
                Assert.AreEqual(expected[index++], actual);
            }
        }