Exemplo n.º 1
0
        static void Main(string[] args)
        {


            BinarySearchTree<int> bst = new BinarySearchTree<int>(16);

            bst.AddNode(8);
            bst.AddNode(18);

            bst.AddNode(30);
            bst.AddNode(2);

            bst.AddNode2(10);
            bst.AddNode2(21);
            bst.AddNode2(9);

            bst.AddNode2(1);
            bst.AddNode2(3);
            bst.AddNode2(32);
            //bst.AddNode2(9);

            //int p = 0;

            //Console.WriteLine(bst.FindInOrderSuccessorPredecessor(15, ref p));
            //Console.WriteLine(p);

            //Console.WriteLine(bst.GetLevelOfNode(2));
            //Console.WriteLine(bst.GetLevelOfNode(16));
            //Console.WriteLine(bst.GetLevelOfNode(2));
            //Console.WriteLine(bst.GetLevelOfNode(1));
            //Console.WriteLine(bst.GetLevelOfNode(9));
            //Console.WriteLine(bst.GetLevelOfNode(30));
            //Console.WriteLine(bst.GetLevelOfNode(21));

            bst.GetCounsinofKey(32);

            int[] i = { 4, 8, 2, 5, 1, 6, 3, 7 };
            int[] p = { 8, 4, 5, 2, 6, 7, 3, 1 };

            var result = BSTExtension.ConstrucTreefromInorderPostOrder(i, p);

            var listDepthWise = bst.GetNodeListByLevel();
            var listDepthWiseDFS = bst.GetNodeListByLevelUsingDFS();
            Console.ReadLine();
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            //Node root = new Node(10);
            BinarySearchTree bst = new BinarySearchTree();

            bst.Insert(bst.Root, bst.AddNode(10));
            bst.Insert(bst.Root, bst.AddNode(5));
            bst.Insert(bst.Root, bst.AddNode(15));
            bst.Insert(bst.Root, bst.AddNode(7));
            bst.Insert(bst.Root, bst.AddNode(12));
            bst.Insert(bst.Root, bst.AddNode(18));
            bst.Insert(bst.Root, bst.AddNode(14));
            bst.Print();
            bst.InsertNewer(bst.Root, new Node(3));
            bst.InsertNewer(bst.Root, new Node(6));
            bst.InsertNewer(bst.Root, new Node(11));

            bst.InsertNewer(bst.Root, new Node(16));
            bst.InsertNewer(bst.Root, new Node(20));


            bst.Print();
            //if(bst.Search(133, bst.Root) != null)
            //{
            //    Console.WriteLine("Found!");
            //}
            //else
            //{
            //    Console.WriteLine("Not Found!");
            //}
            Console.ReadLine();
        }
        public void OneElement_SearchExistingElement()
        {
            //Arrange
            var tree = new BinarySearchTree <int>(DataComparers.NewByType <int>());

            tree.AddNode(50);

            //Act
            Assert.True(tree.Search(50) != null);
        }
        public void Contains_WorksAsExpected(int[] values, int testValue, bool expectedResult)
        {
            var binarySearchTree = new BinarySearchTree();

            foreach (var value in values)
            {
                binarySearchTree.AddNode(value);
            }

            binarySearchTree.Contains(testValue).Should().Be(expectedResult);
        }
        public void InOrder()
        {
            //Arrange
            var tree = new BinarySearchTree <int>(DataComparers.NewByType <int>());

            tree.AddNode(50);
            tree.AddNode(20);
            tree.AddNode(60);
            tree.AddNode(30);
            tree.AddNode(40);
            tree.AddNode(55);


            //Act
            var inorder = new List <int>();

            tree.InOrder((v) => inorder.Add(v.Value));
            Assert.Equal(6, inorder.Count);
            Assert.Equal(20, inorder[0]);
            Assert.Equal(30, inorder[1]);
            Assert.Equal(40, inorder[2]);
            Assert.Equal(50, inorder[3]);
            Assert.Equal(55, inorder[4]);
            Assert.Equal(60, inorder[5]);
        }
        public void SearchExistingElement()
        {
            //Arrange
            var tree = new BinarySearchTree <int>(DataComparers.NewByType <int>());
            var item = tree.AddNode(50);

            item = tree.AddNode(20);
            item = tree.AddNode(60);
            item = tree.AddNode(30);
            item = tree.AddNode(40);
            item = tree.AddNode(55);


            //Act
            var res = tree.Search(50);

            Assert.True(res != null);
            res = tree.Search(20);
            Assert.True(res != null);
            res = tree.Search(60);
            Assert.True(res != null);
            res = tree.Search(30);
            Assert.True(res != null);
            res = tree.Search(40);
            Assert.True(res != null);
            res = tree.Search(55);
            Assert.True(res != null);
        }
Exemplo n.º 7
0
        public void BSTtest()
        {
            BinarySearchTree BST = new BinarySearchTree(new Node(50));

            BST.AddNode(35, BST.Root);
            BST.AddNode(60, BST.Root);
            BST.AddNode(15, BST.Root);
            Assert.Equal(25, BST.AddNode(25, BST.Root).Value);
            // because it already exists
            Assert.Null(BST.AddNode(60, BST.Root));
            Assert.Equal(75, BST.AddNode(75, BST.Root).Value);
        }
        static void Main(string[] args)
        {
            var tree = new BinarySearchTree <int>(DataComparers.NewByType <int>());

            tree.AddNode(50);
            tree.AddNode(30);
            tree.AddNode(60);
            tree.AddNode(20);
            tree.AddNode(40);
            tree.AddNode(55);

            var newTree = tree.Clone();

            System.Console.ReadLine();
        }
        public void SearchNotExistingElement()
        {
            //Arrange
            var tree = new BinarySearchTree <int>(DataComparers.NewByType <int>());

            tree.AddNode(50);
            tree.AddNode(20);
            tree.AddNode(60);
            tree.AddNode(30);
            tree.AddNode(40);
            tree.AddNode(55);


            //Act
            Assert.True(tree.Search(255) == null);
        }
        static void Main(string[] args)
        {
            LinkedList <int> ll = new LinkedList <int>();
            TimerPerformance tp = new TimerPerformance();

            tp.StartTiming();
            ll.AddNode(1);
            Console.WriteLine($"Time for adding \"1\": {tp.StopTiming()}");
            ll.AddNode(2);
            ll.AddNode(3);
            ll.AddNode(4);
            ll.AddNode(5);
            ll.AddNode(6);
            ll.AddNode(7);
            ll.AddNode(8);
            tp.StartTiming();
            ll.AddNode(9);
            Console.WriteLine($"Time for adding \"9\": {tp.StopTiming()}");
            ll.AddNode(10);
            ll.AddNode(11);
            ll.AddNode(12);
            ll.AddNode(13);
            ll.AddNode(14);
            ll.AddNode(15);
            ll.AddNode(16);
            ll.AddNode(17);
            tp.StartTiming();
            ll.AddNode(18);
            Console.WriteLine($"Time for adding \"18\": {tp.StopTiming()}");

            Console.WriteLine("-------------------------DOUBLY LINKED LISTS-------------");

            var doubleLL = new DoublyLinkedList <int>();

            doubleLL.AddNode(1);
            doubleLL.AddNode(2);
            doubleLL.AddNode(3);
            doubleLL.AddNode(4);
            doubleLL.AddNode(5);
            doubleLL.AddNode(6);
            doubleLL.AddNode(7);
            doubleLL.AddNode(8);
            doubleLL.AddNode(9);
            doubleLL.AddNode(10);
            doubleLL.AddNode(11);
            doubleLL.AddNode(12);
            doubleLL.AddNode(13);
            doubleLL.AddNode(14);
            doubleLL.AddNode(15);
            doubleLL.AddNode(16);
            doubleLL.AddNode(17);
            doubleLL.AddNode(18);
            foreach (var item in doubleLL)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine();

            Console.WriteLine("-----------Previous value of node with value \"3\"------------");
            Console.WriteLine(((DoubleNode <int>)doubleLL.HeadNode.NextNode.NextNode).PreviousNode.Value);

            Console.WriteLine($"\nDeleteAt(3)");
            doubleLL.DeleteAt(3);

            //foreach(var item in doubleLL)
            //    Console.WriteLine(item);

            foreach (var item in doubleLL)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("\nPrevious node of element at 3rd index: ");
            Console.Write((doubleLL.HeadNode.NextNode.NextNode.NextNode as DoubleNode <int>).PreviousNode.Value);

            Console.WriteLine();
            Console.WriteLine("Merge nodes and multiply values for singly linked list -----------------");
            Console.WriteLine();

            MergeNodesAndMultValues(ll.HeadNode);

            foreach (var item in ll.ReadValues())
            {
                Console.WriteLine(item);
            }

            //Console.WriteLine($"\nValue of the previous node in singly linked list: {ll.HeadNode.NextNode.NextNode.Value}");

            Console.WriteLine("STACK DATA STRUCTURE ----------------------");

            CStack <int> stack = new CStack <int>();

            stack.Push(1);
            stack.Push(2);
            stack.Push(3);
            stack.Push(4);
            stack.Push(5);
            stack.Push(7);
            stack.Push(8);
            stack.Push(9);
            stack.Push(10);
            stack.Push(11);
            stack.Push(12);

            Console.WriteLine("\ncontinuous .Pop() calls");
            Console.WriteLine();

            foreach (var item in stack)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine();
            stack.Pop();
            foreach (var item in stack)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine();
            stack.Pop();
            foreach (var item in stack)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine();
            stack.Pop();
            foreach (var item in stack)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("\nSTACK DATA STRUCTURE WITH LINKED LIST ----------------------");

            LLStack <int> llStack = new LLStack <int>();

            llStack.Push(1);
            llStack.Push(2);
            llStack.Push(3);
            llStack.Push(4);
            llStack.Push(5);
            llStack.Push(6);
            llStack.Push(7);
            llStack.Push(8);
            llStack.Push(9);
            llStack.Push(10);

            Console.WriteLine("Read llStack values----------");
            Console.WriteLine();

            foreach (var item in llStack)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("llStack.Pop()");
            llStack.Pop();

            foreach (var item in llStack)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("llStack.Pop()");
            llStack.Pop();

            foreach (var item in llStack)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("llStack.Push(11)");
            llStack.Push(11);

            foreach (var item in llStack)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine();
            Console.WriteLine("Intersecting node------");

            LinkedList <int> l1 = new LinkedList <int>(), l2 = new LinkedList <int>();

            l1.AddNode(1);
            l1.AddNode(2);
            l1.AddNode(3);
            l1.AddNode(4);
            l1.AddNode(7);
            l1.AddNode(8);
            l1.AddNode(9);
            l2.AddNode(2);
            l2.AddNode(4);
            Console.WriteLine(LinkedList <int> .FindIntesectingNode(l1, l2));

            l1.GetNthReverseNode(1);
            foreach (var item in l1)
            {
                Console.WriteLine(item);
            }


            //QUEUE
            //Console.WriteLine("\nQUEUE DATA STRUCTURE USAGE\n");
            //CQueue<int> queue = new CQueue<int>();
            //queue.Enqueue(1);
            //queue.Enqueue(3);
            //queue.Enqueue(2);
            //queue.Enqueue(4);
            //queue.Enqueue(5);
            //queue.Enqueue(6);
            //queue.Enqueue(7);
            //queue.Enqueue(8);
            //queue.Enqueue(7);
            //queue.Dequeue();
            //queue.Dequeue();
            //queue.Enqueue(9);
            //queue.Enqueue(10);
            //queue.Enqueue(11);
            //foreach (var item in queue)
            //    Console.WriteLine(item);

            //Console.WriteLine("queue.Dequeue() * 3");
            //Console.WriteLine($"ITEM REMOVED: {queue.Dequeue()}");
            //Console.WriteLine($"ITEM REMOVED: {queue.Dequeue()}");
            //Console.WriteLine($"ITEM REMOVED: {queue.Dequeue()}");
            //Console.WriteLine($"ITEM REMOVED: {queue.Dequeue()}");
            //Console.WriteLine($"ITEM REMOVED: {queue.Dequeue()}");
            //Console.WriteLine($"ITEM REMOVED: {queue.Dequeue()}");
            //Console.WriteLine($"ITEM REMOVED: {queue.Dequeue()}");
            //Console.WriteLine($"ITEM REMOVED: {queue.Dequeue()}");
            //Console.WriteLine($"ITEM REMOVED: {queue.Dequeue()}");
            //Console.WriteLine($"ITEM REMOVED: {queue.Dequeue()}");
            //Console.WriteLine($"ITEM REMOVED: {queue.Dequeue()}");
            //Console.WriteLine($"ITEM REMOVED: {queue.Dequeue()}");
            //Console.WriteLine($"ITEM REMOVED: {queue.Dequeue()}");

            //Console.WriteLine($"\nqueue.IsEmpty(): {queue.IsEmpty()}");
            //foreach (var item in queue)
            //    Console.WriteLine(item);


            //Console.WriteLine("LLQueue USAGE----------------\n");
            //LLQueue<int> queue2 = new LLQueue<int>();
            //queue2.Enqueue(1);
            //queue2.Enqueue(2);
            //queue2.Enqueue(3);
            //queue2.Enqueue(4);
            //queue2.Enqueue(5);
            //queue2.Enqueue(6);
            //queue2.Enqueue(7);
            //queue2.Enqueue(8);
            //queue2.Enqueue(9);
            //Console.WriteLine();
            //queue2.PrintElems();
            //Console.WriteLine();
            //queue2.Dequeue();
            //queue2.Dequeue();
            //queue2.PrintElems();
            //Console.WriteLine();
            //queue2.Enqueue(10);
            //queue2.PrintElems();

            //BST
            Console.WriteLine("Binary Search Tree in ACTION!----------");
            BinarySearchTree bst = new BinarySearchTree();

            //bst.AddNode(6);
            //bst.AddNode(3);
            //bst.AddNode(9);
            //bst.AddNode(1);
            //bst.AddNode(8);
            //bst.AddNode(4);
            //bst.AddNode(10);    ITERATIVE APROACH, BETTER

            bst.AddNodeRecursive(6);
            bst.AddNodeRecursive(3);
            bst.AddNodeRecursive(9);
            bst.AddNodeRecursive(1);
            bst.AddNodeRecursive(8);
            bst.AddNodeRecursive(4);
            bst.AddNodeRecursive(10);
            bst.AddNodeRecursive(7);

            Console.Write("\nbst.ExistNode(4)? -> ");
            Console.WriteLine(bst.ExistNode(4));

            tp.StartTiming();
            Console.Write("\nbst.ExistNode(11)? -> ");
            Console.WriteLine(bst.ExistNode(11));
            Console.WriteLine($"TIME TAKEN IN ExistNode() OPERATION: {tp.StopTiming()}");

            Console.Write("\nbst.ExistNode(10)? -> ");
            Console.WriteLine(bst.ExistNode(10));


            //USE OF BFS AND DFS ALGORITHMS TO TRAVERSE THE TREE
            Console.WriteLine("using BFS and DFS ---------------------------");
            List <int> bfs = new List <int>();

            bst.TraverseDFSPreorder(bfs, bst.Root);
            foreach (var item in bfs)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine();
            bfs.Clear();
            bst.TraverseDFSPreorderIterative(bfs);
            foreach (var item in bfs)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("\nGiven a BT, return the sum of all the depths for all the nodes in it\nSOLUTION");
            BinarySearchTree bst2 = new BinarySearchTree();

            bst2.AddNode(4);
            bst2.AddNode(2);
            bst2.AddNode(6);
            bst2.AddNode(1);
            bst2.AddNode(3);
            bst2.AddNode(7);
            bst2.AddNode(5);

            Console.WriteLine(bst2.SumDepths());

            BSTNode <int> rootNode = new BSTNode <int>(5);

            rootNode.LeftRoot            = new BSTNode <int>(3);
            rootNode.RightRoot           = new BSTNode <int>(8);
            rootNode.RightRoot.LeftRoot  = new BSTNode <int>(7);
            rootNode.RightRoot.RightRoot = new BSTNode <int>(9);
            rootNode.LeftRoot.RightRoot  = new BSTNode <int>(4);
            rootNode.LeftRoot.LeftRoot   = new BSTNode <int>(2);

            Console.WriteLine($"\nIs Binary Search Tree the following tree?: {bst2.IsBST(rootNode)}");

            Console.WriteLine($"\nBinarySearchTreee.GetPredecessor(4): {bst2.GetPredecessor(4).Value}");
            Console.WriteLine($"\nBinarySearchTreee.GetSucessor(3): {bst2.GetSuccesor(3).Value}");

            Console.WriteLine("\nBinarySearchTree.DeleteNode(6)");
            bst2.DeleteNode(bst2.Root, 6);

            bst2.AddNode(6);
            Console.WriteLine("\nBinarySearchTree.DeleteNodeMCD(6)");
            bst2.DeleteNodeMCD(bst2.Root, 6);

            bst2.AddNode(6);

            //Graphs

            Console.WriteLine("Graphs---------------------------");
            EdgeListGraph <int> undirectedGraph = new EdgeListGraph <int>();

            undirectedGraph.vertices = new int[] { 1, 2, 3, 4 };
            undirectedGraph.edges    = new Edge[] { new Edge(0, 1), new Edge(0, 3), new Edge(2, 1), new Edge(2, 3) };
            Console.WriteLine("undirectedGraph.GetAdyacentNodes(4): ");
            undirectedGraph.GetAdyacentNodes(4);

            //Heaps

            Console.WriteLine("Min Heap ds-----------");
            MinHeap minHeap = new MinHeap(10);

            minHeap.Insert(7);
            minHeap.Insert(3);
            minHeap.Insert(6);
            minHeap.Remove();
            minHeap.Insert(1);
            minHeap.Insert(2);
            minHeap.Remove();
            minHeap.Insert(5);
            minHeap.Insert(4);

            foreach (var item in minHeap)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine("-Max Heap--------------------------------");

            MaxHeap maxHeap = new MaxHeap(10);

            maxHeap.Insert(2);
            maxHeap.Insert(1);
            maxHeap.Insert(4);
            maxHeap.Remove();
            maxHeap.Insert(2);
            maxHeap.Insert(1);
            maxHeap.Insert(9);
            maxHeap.Remove();
            Console.WriteLine(maxHeap.Peek() == 2);

            foreach (var item in maxHeap)
            {
                Console.WriteLine(item);
            }
        }
        public void Given3Nodes_WhenAddedToBinaryTree_ShouldReturnSizeTh()
        {
            BinaryTree.AddNode(56);
            BinaryTree.AddNode(30);
            BinaryTree.AddNode(70);

            Assert.AreEqual(56, BinaryTree.GetRoot);
            Assert.AreEqual(30, BinaryTree.GetRootLeft);
            Assert.AreEqual(70, BinaryTree.GetRootRight);
        }
Exemplo n.º 12
0
        static void Main(string[] args)
        {
            BinarySearchTree bst = new BinarySearchTree();

            // Inserting Nodes to Binary search Tree
            bst.Insert(bst.Root, bst.AddNode(50));
            bst.Insert(bst.Root, bst.AddNode(40));
            bst.Insert(bst.Root, bst.AddNode(60));
            bst.Insert(bst.Root, bst.AddNode(35));
            bst.Insert(bst.Root, bst.AddNode(45));
            bst.Insert(bst.Root, bst.AddNode(42));
            bst.Insert(bst.Root, bst.AddNode(30));
            bst.Insert(bst.Root, bst.AddNode(70));
            bst.Insert(bst.Root, bst.AddNode(58));
            bst.Insert(bst.Root, bst.AddNode(59));
            bst.Insert(bst.Root, bst.AddNode(65));
            bst.Insert(bst.Root, bst.AddNode(75));
            //Traversing BST in Inorder fashion


            bst.Print();
            bst.Inorder(bst.Root);
            Console.WriteLine();
            bst.IterativeInorder(bst.Root);
            Console.ReadKey();
        }
        public void StackTest()
        {
            IBinarySearchTree <int> BST = new BinarySearchTree <int>();

            //IBinarySearchTreeNode<int> node100 = new BinarySearchTreeNode<int>(100);
            //IBinarySearchTreeNode<int> node110 = new BinarySearchTreeNode<int>(110);
            //IBinarySearchTreeNode<int> node120 = new BinarySearchTreeNode<int>(120);
            //IBinarySearchTreeNode<int> node130 = new BinarySearchTreeNode<int>(130);
            //IBinarySearchTreeNode<int> node140 = new BinarySearchTreeNode<int>(140);
            //IBinarySearchTreeNode<int> node150 = new BinarySearchTreeNode<int>(150);
            //IBinarySearchTreeNode<int> node90 = new BinarySearchTreeNode<int>(90);
            //IBinarySearchTreeNode<int> node80 = new BinarySearchTreeNode<int>(80);
            //IBinarySearchTreeNode<int> node70 = new BinarySearchTreeNode<int>(70);
            //IBinarySearchTreeNode<int> node60 = new BinarySearchTreeNode<int>(60);
            //IBinarySearchTreeNode<int> node50 = new BinarySearchTreeNode<int>(50);

            var root = BST.AddNode(12);

            BST.AddNode(5);
            BST.AddNode(3);
            BST.AddNode(7);
            BST.AddNode(9);
            BST.AddNode(8);
            BST.AddNode(11);
            BST.AddNode(15);
            BST.AddNode(13);
            BST.AddNode(14);
            BST.AddNode(17);
            BST.AddNode(20);
            BST.AddNode(18);

            string s = BST.DrawTree();

            Debug.WriteLine(s);
            var n = BST.RemoveNode(5);

            //BST.RemoveNode(170);
            //Debug.WriteLine(BST.DrawTree());
            //BST.RemoveNode(140);
            //Debug.WriteLine(BST.DrawTree());
            //BST.RemoveNode(60);
            //Debug.WriteLine(BST.DrawTree());
        }
Exemplo n.º 14
0
        static void Main(string[] args)
        {
            BinarySearchTree bst = new BinarySearchTree();

            // Inserting Nodes to Binary search Tree
            bst.Insert(bst.Root, bst.AddNode(50));
            bst.Insert(bst.Root, bst.AddNode(40));
            bst.Insert(bst.Root, bst.AddNode(60));
            bst.Insert(bst.Root, bst.AddNode(35));
            bst.Insert(bst.Root, bst.AddNode(45));
            bst.Insert(bst.Root, bst.AddNode(30));
            bst.Insert(bst.Root, bst.AddNode(48));
            bst.Insert(bst.Root, bst.AddNode(70));
            bst.Insert(bst.Root, bst.AddNode(58));
            bst.Insert(bst.Root, bst.AddNode(55));
            bst.Insert(bst.Root, bst.AddNode(65));
            bst.Insert(bst.Root, bst.AddNode(75));
            // Traversing BST in Inorder fashion
            //bst.Inorder(bst.Root);
            bst.Print();
            bst.SumOfAllPaths(bst.Root, 0);
            Console.ReadKey();
        }
Exemplo n.º 15
0
        static void Main(string[] args)
        {
            MinHeap  mh    = new MinHeap();
            HeapNode hNode = new HeapNode();

            mh.AddItem(10);
            mh.AddItem(100);
            mh.AddItem(30);
            mh.AddItem(40);
            mh.AddItem(55);
            mh.AddItem(25);
            mh.AddItem(27);
            mh.AddItem(5);
            mh.Print();
            mh.RemoveItem(40);
            mh.Print();
            mh.PopMin();
            mh.Print();

            Console.WriteLine("Press ENTER to continue...");
            Console.ReadLine();


            //ReferenceEquals:
            //https://msdn.microsoft.com/en-us/library/ms379572(v=vs.80).aspx

            BinarySearchTree bst = new BinarySearchTree();

            bst.InitializeBST(5);
            bst.AddNode(9);
            bst.AddNode(3);
            bst.AddNode(4);
            bst.AddNode(2);
            bst.AddNode(6);
            bst.AddNode(2);
            bst.AddNode(7);
            bst.AddNode(8);
            bst.AddNode(10);
            bst.AddNode(1);

            BinarySearchTree bst2 = new BinarySearchTree();

            bst2.InitializeBST(9);
            bst2.AddNode(6);
            bst2.AddNode(10);
            bst2.AddNode(7);
            bst2.AddNode(8);
            bst2.AddNode(2);

            BSTcalc cal    = new BSTcalc();
            int     height = cal.getHeight(bst.root);

            Console.WriteLine("Tree Height = {0}", height);
            cal.IsBalanced(bst.root);
            cal.LCA(bst.root, 4, 7);
            cal.bstLCA(bst.root, 4, 7);
            cal.containsTree(bst.root, bst2.root);
            cal.getPaths(bst.root);


            Console.WriteLine("Printing Pre Order ...");
            PrintBST_PreOrder(bst.root);
            Console.WriteLine();
            Console.WriteLine("--------------------");

            Console.WriteLine("Printing In Order ...");
            PrintBST_InOrder(bst.root);
            Console.WriteLine();
            Console.WriteLine("--------------------");

            Console.WriteLine("Printing Post Order ...");
            PrintBST_PostOrder(bst.root);
            Console.WriteLine();
            Console.WriteLine("--------------------");

            Console.WriteLine("END ---");
            Console.ReadLine();
        }