public void WideAllNodes()
        {
            BST <int> BSTTree = new BST <int>(null);

            Assert.AreEqual(0, BSTTree.Count());

            BSTTree.AddKeyValue(50, 50);
            BSTTree.AddKeyValue(25, 25);
            BSTTree.AddKeyValue(10, 10);
            BSTTree.AddKeyValue(-50, -50);
            BSTTree.AddKeyValue(30, 30);
            BSTTree.AddKeyValue(35, 35);
            BSTTree.AddKeyValue(100, 100);
            BSTTree.AddKeyValue(80, 80);
            BSTTree.AddKeyValue(75, 75);
            BSTTree.AddKeyValue(79, 79);
            BSTTree.AddKeyValue(150, 150);
            BSTTree.AddKeyValue(160, 160);

            Assert.AreEqual(12, BSTTree.Count());

            /*                [50]
             *        (25)               (100)
             *     (10)  (30)        (80)     (150)
             *   (-50)     (35)  (75)            (160)
             *                      (79)
             */

            List <BSTNode <int> > WideNodes = BSTTree.WideAllNodes();
            string wideResult = "";

            for (int i = 0; i < WideNodes.Count; i++)
            {
                wideResult = wideResult + WideNodes[i].NodeKey.ToString() + " ";
            }

            Assert.AreEqual("50 25 100 10 30 80 150 -50 35 75 160 79 ", wideResult);
        }
        public void DeepAllNodes()
        {
            BST <int> BSTTree = new BST <int>(null);

            Assert.AreEqual(0, BSTTree.Count());

            BSTTree.AddKeyValue(50, 50);
            BSTTree.AddKeyValue(25, 25);
            BSTTree.AddKeyValue(10, 10);
            BSTTree.AddKeyValue(-50, -50);
            BSTTree.AddKeyValue(30, 30);
            BSTTree.AddKeyValue(35, 35);
            BSTTree.AddKeyValue(100, 100);
            BSTTree.AddKeyValue(80, 80);
            BSTTree.AddKeyValue(75, 75);
            BSTTree.AddKeyValue(79, 79);
            BSTTree.AddKeyValue(150, 150);
            BSTTree.AddKeyValue(160, 160);

            Assert.AreEqual(12, BSTTree.Count());

            /*                [50]
             *        (25)               (100)
             *     (10)  (30)        (80)     (150)
             *   (-50)     (35)  (75)            (160)
             *                      (79)
             */

            // in-order (0)
            List <BSTNode <int> > DeepNodes0 = BSTTree.DeepAllNodes(0);
            string order0 = "";

            for (int i = 0; i < DeepNodes0.Count; i++)
            {
                order0 = order0 + DeepNodes0[i].NodeKey.ToString() + " ";
            }

            Assert.AreEqual("-50 10 25 30 35 50 75 79 80 100 150 160 ", order0);

            // post-order (1)
            List <BSTNode <int> > DeepNodes1 = BSTTree.DeepAllNodes(1);
            string order1 = "";

            for (int i = 0; i < DeepNodes1.Count; i++)
            {
                order1 = order1 + DeepNodes1[i].NodeKey.ToString() + " ";
            }

            Assert.AreEqual("-50 10 35 30 25 79 75 80 160 150 100 50 ", order1);

            // pre-order (2)
            List <BSTNode <int> > DeepNodes2 = BSTTree.DeepAllNodes(2);
            string order2 = "";

            for (int i = 0; i < DeepNodes2.Count; i++)
            {
                order2 = order2 + DeepNodes2[i].NodeKey.ToString() + " ";
            }

            Assert.AreEqual("50 25 10 -50 30 35 100 80 75 79 150 160 ", order2);
        }