/// <summary>
        /// Tree implementations.
        /// 1. Insert
        /// 2. Remove
        /// 3. Search
        /// </summary>
        static Ttree PracticeTree <Ttree>()
        {
            var binarySearchTree = new BST <int>()
            {
                Comparer = Comparer <int> .Default
            };

            /*
             *        10
             *       /  \
             *      5    20
             *     / \
             *    2   6
             \
             \      3
             */
            var nodeA = new TreeNode <int>()
            {
                Value = 10
            };
            var nodeB = new TreeNode <int>()
            {
                Value = 20
            };
            var nodeC = new TreeNode <int>()
            {
                Value = 5
            };
            var nodeD = new TreeNode <int>()
            {
                Value = 6
            };
            var nodeE = new TreeNode <int>()
            {
                Value = 2
            };
            var nodeF = new TreeNode <int>()
            {
                Value = 3
            };

            binarySearchTree.Insert(nodeA);
            binarySearchTree.Insert(nodeB);
            binarySearchTree.Insert(nodeC);
            binarySearchTree.Insert(nodeD);
            binarySearchTree.Insert(nodeE);
            binarySearchTree.Insert(nodeF);

            binarySearchTree.Search(nodeD);

            //binarySearchTree.Delete(nodeA);
            //binarySearchTree.Delete(nodeD);

            binarySearchTree.Search(nodeD);

            binarySearchTree.PreOrder();
            binarySearchTree.InOrder();
            binarySearchTree.PostOrder();

            Console.ReadLine();

            return((Ttree)(object)binarySearchTree);
        }