Example #1
0
    public static void Main()
    {
        System.Console.WriteLine("Running tree app");
        BinaryTree tree = new Tree.BinaryTree();

        tree.insert(tree.r, 2);
        tree.insert(tree.r, 3);
        tree.insert(tree.r, 1);
        tree.insert(tree.r, 4);
        tree.insert(tree.r, 5);
        tree.postOrder(tree.r);
        // should print pre order
        tree.traverseIteratively(tree.r);
    }
        public static void TreeExample()
        {
            Node node7 = new Node(null, null, 70);
            Node node6 = new Node(null, null, 60);
            Node node5 = new Node(null, null, 50);
            Node node4 = new Node(null, null, 40);
            Node node3 = new Node(node6, node7, 30);
            Node node2 = new Node(node4, node5, 20);
            Node node1 = new Node(node2, node3, 10);

            BinaryTree BT1 = new BinaryTree(node1);

            BT1.nodes = new List <Node>();
            BinaryTree BT2 = new BinaryTree(node1);

            BT2.nodes = new List <Node>();
            BinaryTree BT3 = new BinaryTree(node1);

            BT3.nodes = new List <Node>();

            List <Node> preOrder  = BT1.PreOrder(node1);
            List <Node> inOrder   = BT2.InOrder(node1);
            List <Node> postOrder = BT3.PostOrder(node1);

            Console.WriteLine("PreOrder search results");

            foreach (Node item in preOrder)
            {
                Console.WriteLine($"{item.Value}");
            }

            BT1.nodes.Clear();

            Console.WriteLine("===========================");

            Console.WriteLine("InOrder search results");

            foreach (Node item in inOrder)
            {
                Console.WriteLine($"{item.Value}");
            }

            BT2.nodes.Clear();

            Console.WriteLine("===========================");

            Console.WriteLine("PostOrder search results");

            foreach (Node item in postOrder)
            {
                Console.WriteLine($"{item.Value}");
            }

            BT3.nodes.Clear();

            Console.WriteLine("===========================");

            Node nodeSeven = new Node(null, null, 70);
            Node nodeSix   = new Node(null, null, 50);
            Node nodeFive  = new Node(null, null, 30);
            Node nodeFour  = new Node(null, null, 10);
            Node nodeThree = new Node(nodeSix, nodeSeven, 60);
            Node nodeTwo   = new Node(nodeFour, nodeFive, 20);
            Node nodeOne   = new Node(nodeTwo, nodeThree, 40);

            BinarySearchTree BTS = new BinarySearchTree(nodeOne);
            BinaryTree       BT  = new BinaryTree(nodeOne);

            BT.nodes = new List <Node>();

            List <Node> search = BT.InOrder(nodeOne);

            Console.WriteLine("BinarySearchTree results");

            foreach (Node item in search)
            {
                Console.WriteLine($"{item.Value}");
            }

            BT.nodes.Clear();

            Console.WriteLine("===========================");

            Console.WriteLine("Binary Search: searching for 50");

            Console.WriteLine($"Search result: {BTS.Search(50, nodeOne).Value}");

            Console.WriteLine("===========================");

            Console.WriteLine("Adding to Binary Search Tree");

            Node nodeEight = new Node(null, null, 25);

            Console.WriteLine($"Node to add: {nodeEight.Value}");

            BTS.Add(nodeOne, nodeEight);

            List <Node> add = BT.InOrder(nodeOne);

            foreach (Node item in add)
            {
                Console.WriteLine($"{item.Value}");
            }
        }
Example #3
0
        public static void Test()
        {
            BinaryTree <int> tree = new BinaryTree <int>();

            // tree.Add(1, 5, 7, 2, 3, 8);
            tree.RecursiveAdd(4, 2, 6, 1, 3, 5, 7);

            BinaryTree <string> tree2 = new BinaryTree <string>();

            tree2.RecursiveAdd("d", "b", "f", "a", "c", "e", "g");

            BinaryTree <int> tree3 = new BinaryTree <int>();

            Random rnd = new Random();

            int[] varios = new int[1000];
            for (int i = 0; i < 1000; i++)
            {
                int a = rnd.Next(0, 1000000);
                varios[i] = a;
            }

            //  tree3.Add(7, 1, 9, 0, 3, 8, 10, 2, 5, 4, 6);
            tree3.Add(varios);

            Console.WriteLine(string.Join(", ", tree.RecursiveInOrder()));
            Console.WriteLine(string.Join(", ", tree2.RecursiveInOrder()));


            Console.WriteLine();

            System.Diagnostics.Stopwatch s = new System.Diagnostics.Stopwatch();

            s.Start();
            string xxa = string.Join(", ", tree3.RecursiveInOrder());

            s.Stop();
            Console.WriteLine("RecursiveInOrder:".MetricJoin(s.Elapsed.ToString(), 19));
            Thread.Sleep(100);

            s.Restart();
            string xa = string.Join(", ", tree3.RecursiveInOrder());

            s.Stop();
            Console.WriteLine("RecursiveInOrder:".MetricJoin(s.Elapsed.ToString(), 19));
            Thread.Sleep(100);

            s.Restart();
            tree3.PrintInOrder2();
            string xbaa = string.Join(", ", tree3.z);

            s.Stop();
            Console.WriteLine("Print in order 2:".MetricJoin(s.Elapsed.ToString(), 19));

            tree3.z.Clear();
            //  BinaryTree<int> tre = new BinaryTree<int>();
            //tre.RecursiveAdd(5, 1, 4, 9, 2, 3, 8, 6, 7);
            Thread.Sleep(100);


            s.Restart();
            tree3.PrintInOrder2();
            string ax = string.Join(", ", tree3.z);

            s.Stop();
            Console.WriteLine("Print in order 2:".MetricJoin(s.Elapsed.ToString(), 19));

            tree3.x.Clear();
            GC.Collect();
            Thread.Sleep(100);


            s.Restart();
            tree3.PrintInOrder1();
            string pt3 = string.Join(", ", tree3.x);

            s.Stop();
            Console.WriteLine("Print in order 1:".MetricJoin(s.Elapsed.ToString(), 19));
            Thread.Sleep(100);


            s.Restart();
            //tree3.PreOrder();
            string pt4 = string.Join(", ", tree3.PreOrder());

            s.Stop();
            Console.WriteLine("Pre order:".MetricJoin(s.Elapsed.ToString(), 19));

            //    Console.WriteLine(pt4);

            BinaryTree <string> STR = new BinaryTree <string>();

            STR.RecursiveAdd("F", "B", "A", "D", "C", "E", "G", "I", "H");

            //    Console.WriteLine(string.Join(", ", STR.PreOrder()));
        }
Example #4
0
 public bool AreIdentical(BinaryTree <T> other)
 {
     return(AreIdenticalInternalRecursiveUtil(this.Root, other.Root));
 }
 public string ToString(BinaryTree <T> tree, FormatInfo info)
 {
     return(ToString(tree.Root, info));
 }
        public string ToString(BinaryTree <T> tree, ShowType showType)
        {
            var formatInfo = new FormatInfo(showType);

            return(ToString(tree.Root, formatInfo));
        }
Example #7
0
        static void Main(string[] args)
        {
            Console.WriteLine("Binary Tree!");

            BinaryTree myTree = new BinaryTree(1);

            myTree.root.Left       = new Node(2);
            myTree.root.Right      = new Node(3);
            myTree.root.Left.Left  = new Node(4);
            myTree.root.Left.Right = new Node(5);

            List <int> PreOrderList  = new List <int>();
            List <int> InOrderList   = new List <int>();
            List <int> PostOrderList = new List <int>();

            myTree.PreOrder(myTree.root, PreOrderList);

            /// <summary>
            /// Pre-order tree traversal
            /// </summary>
            foreach (int val in PreOrderList)
            {
                Console.Write($"{val} ");
            }
            Console.WriteLine("Print PreOrder data traversal  values");

            /// <summary>
            /// In-order tree traversal
            /// </summary>
            myTree.InOrder(myTree.root, InOrderList);
            foreach (int val in InOrderList)
            {
                Console.Write($"{val} ");
            }
            Console.WriteLine("Print InOrder data traversal  values");

            /// <summary>
            /// Post-order tree traversal
            /// </summary>
            myTree.PostOrder(myTree.root, PostOrderList);
            foreach (int val in PostOrderList)
            {
                Console.Write($"{val} ");
            }
            Console.WriteLine("Print PostOrder data traversal values");

            Console.WriteLine();
            int[] bstValues = { 1, 2, 3, 4, 5 };

            /// <summary>
            /// Print values of binary search tree
            /// </summary>
            BinarySearchTree BST = new BinarySearchTree();

            foreach (int num in bstValues)
            {
                BST.root = BST.Add(BST.root, num);
            }

            List <int> bstInOrder = new List <int>();

            BST.InOrder(BST.root, bstInOrder);

            foreach (int num in bstInOrder)
            {
                Console.Write($"{num}");
            }
            Console.WriteLine(" Binary Search Tree InOrder data traversal values");
        }
Example #8
0
        public void Run()
        {
            BinaryTree <int> btree = new BinaryTree <int>();

            btree.Root       = new BinaryTreeNode <int>(1);
            btree.Root.Left  = new BinaryTreeNode <int>(2);
            btree.Root.Right = new BinaryTreeNode <int>(3);

            btree.Root.Left.Left = new BinaryTreeNode <int>(4);

            btree.Root.Right.Right = new BinaryTreeNode <int>(5);

            btree.Root.Left.Left.Right = new BinaryTreeNode <int>(6);

            btree.Root.Right.Right.Right = new BinaryTreeNode <int>(7);

            btree.Root.Right.Right.Right.Right = new BinaryTreeNode <int>(8);


            BinaryTree <int> btreeOther = new BinaryTree <int>();

            btreeOther.Root       = new BinaryTreeNode <int>(1);
            btreeOther.Root.Left  = new BinaryTreeNode <int>(2);
            btreeOther.Root.Right = new BinaryTreeNode <int>(3);

            btreeOther.Root.Left.Left   = new BinaryTreeNode <int>(4);
            btreeOther.Root.Right.Right = new BinaryTreeNode <int>(5);

            btreeOther.Root.Left.Left.Right = new BinaryTreeNode <int>(6);

            btreeOther.Root.Right.Right.Right = new BinaryTreeNode <int>(7);

            btreeOther.Root.Right.Right.Right.Right = new BinaryTreeNode <int>(8);

            btree.PreorderTraversalRecursive();
            btree.PreOrderTraversalIterative();
            btree.PreOrderTraversalIterativeCompilerMimic();

            btree.PostorderTraversalRecursive();
            btree.PostOrderTraversalIterative();
            btree.PostOrderTraversalIterativeCompilerMimic();

            btree.InorderTraversalRecursive();
            btree.InorderTraversalIterative();
            btree.InOrderTraversalIterativeCompilerMimic();

            btree.PrintLevelOrderTranversal();
            Console.WriteLine("Size of tree:" + btree.GetSizeOfTree());

            Console.WriteLine("Are identical: " + btree.AreIdentical(btreeOther));

            Console.WriteLine("Max depth of tree: " + btree.MaxDepth());

            Console.WriteLine("Tree contains 5: " + btree.Contains(5));
            Console.WriteLine("Tree contains 10: " + btree.Contains(10));

            //btree.MirrorTree();
            //btree.PrintLevelOrderTranversal();

            btree.PrintRootToLeafPaths();

            Console.WriteLine("LCA for binary tree: " + btree.FindLowestCommonAncestor(7, 6).Data);
            Console.WriteLine("Largest BST subtree size: " + btree.LargestBstSubtree());

            Console.WriteLine("----------------BST----------------");

            BinarySearchTree <int> binarySearchTree = new BinarySearchTree <int>();

            binarySearchTree.Insert(50);
            binarySearchTree.Insert(30);
            binarySearchTree.Insert(20);
            binarySearchTree.Insert(40);
            binarySearchTree.Insert(70);
            binarySearchTree.Insert(60);
            binarySearchTree.Insert(80);

            int temp = binarySearchTree.Root.Left.Data;

            binarySearchTree.Root.Left.Data  = binarySearchTree.Root.Right.Data;
            binarySearchTree.Root.Right.Data = temp;

            binarySearchTree.InorderTraversalRecursive();
            binarySearchTree.CorrectBst();
            binarySearchTree.InorderTraversalRecursive();


            binarySearchTree.InorderTraversalRecursive();
            Console.WriteLine("BST contain 60 : " + binarySearchTree.Contains(60));
            Console.WriteLine("BST contain 66 : " + binarySearchTree.Contains(66));
            Console.WriteLine("MinValue in BST: " + binarySearchTree.MinValue());

            Console.WriteLine("Is BST: " + binarySearchTree.IsBst());
            Console.WriteLine("InOrderSuccessor of root(50): " + binarySearchTree.InOrderSuccessor(binarySearchTree.Root).Data);
            Console.WriteLine("5th node: " + binarySearchTree.KthSmallestNode(5).Data);
            Console.WriteLine("Largest BST subtree size: " + binarySearchTree.LargestBstSubtree());
            Console.WriteLine("Ceil for 50:" + binarySearchTree.Ceil(50));
            Console.WriteLine("CeilIterative for 51:" + binarySearchTree.CeilIterative(51));
            Console.WriteLine("FloorIterative for 49:" + binarySearchTree.FloorIterative(49));

            SinglyLinkedList <int> sortedLinkedList = new SinglyLinkedList <int>();

            sortedLinkedList.PushToHead(70);
            sortedLinkedList.PushToHead(60);
            sortedLinkedList.PushToHead(50);
            sortedLinkedList.PushToHead(40);
            sortedLinkedList.PushToHead(30);
            sortedLinkedList.PushToHead(20);
            sortedLinkedList.PushToHead(10);
            BinarySearchTree <int> bstFromSll = BinarySearchTree <int> .GetBstFromSortedList(sortedLinkedList);

            bstFromSll.InorderTraversalRecursive();

            BinarySearchTree <int> .PrintCommonNodes(binarySearchTree, bstFromSll);

            binarySearchTree.AddGreaterNodeSum();
            binarySearchTree.InorderTraversalRecursive();


            int[] sortedArray = new int[7] {
                1, 2, 3, 4, 5, 6, 7
            };
            BinarySearchTree <int> bstFromArray = BinarySearchTree <int> .GetBstFromSortedArray(sortedArray);

            bstFromArray.InorderTraversalRecursive();

            binarySearchTree.GetInorderTraversal();

            BinarySearchTree <int> mergeBst = BinarySearchTree <int> .GetMergeTree(bstFromSll, bstFromArray);

            mergeBst.InorderTraversalRecursive();

            int[] preOrderOfSomeTreeWithOnlyONeChildAtEachNode = new int[] { 20, 10, 11, 13, 12 };
            Console.WriteLine("preOrderOfSomeTreeWithOnlyONeChildAtEachNode:" +
                              BinarySearchTree <int> .IsPreOrderWithOnlyOneChildSatisfyBstProperty(preOrderOfSomeTreeWithOnlyONeChildAtEachNode));

            int[] preOrderOfTree = new int[] { 8, 10, 12, 15, 16, 20, 25 };
            BinarySearchTree <int> bstFromPreOrder = BinarySearchTree <int> .ConstructBstFromPreOrder(preOrderOfTree);

            bstFromPreOrder.InorderTraversalRecursive();

            //bstFromPreOrder.BstToDll();
            //dll.Print();

            BinarySearchTree <int> .FindPairWithSumAs(bstFromPreOrder.Root, 33);

            bstFromPreOrder.RemoveOutsideRangeNodes(10, 26);
            bstFromPreOrder.InorderTraversalRecursive();

            AugmentedBst <int> augmentedBst = new AugmentedBst <int>();

            augmentedBst.Insert(50);
            augmentedBst.Insert(30);
            augmentedBst.Insert(20);
            augmentedBst.Insert(40);
            augmentedBst.Insert(70);
            augmentedBst.Insert(60);
            augmentedBst.Insert(80);

            augmentedBst.InorderTraversalRecursive();
            Console.WriteLine("5th element: " + augmentedBst.KthSmallestNodeInOrderOfHeightTime(5).Data);


            Console.ReadLine();
        }