public bool Contain(int SearchValue)
 {
     if (Data == SearchValue)
     {
         return(true);
     }
     else if (Data > SearchValue)
     {
         if (Left == null)
         {
             return(false);
         }
         else
         {
             return(Left.Contain(SearchValue));
         }
     }
     else
     {
         if (Right == null)
         {
             return(false);
         }
         else
         {
             return(Right.Contain(SearchValue));
         }
     }
 }
        static void Main(string[] args)
        {
            List <int> NumberArray = new List <int> {
                79, 69, 9, 95, 65, 49, 65, 40, 27, 95
            };

            //Sorted List elements
            foreach (int n in MergeSort.DivideSortList(NumberArray))
            {
                //Console.Write(n + " ");
            }
            //Console.WriteLine(MergeSort.DivideArray(NumberArray).LastOrDefault());

            /**************
            *
            * START QUEUE
            *
            * ************/
            CustomQueue q = new CustomQueue();

            CustomQueue.IsEmpty();
            CustomQueue.Dequeue();
            CustomQueue.Enqueue(10);
            CustomQueue.Enqueue(20);
            CustomQueue.Enqueue(30);
            CustomQueue.Enqueue(40);
            CustomQueue.Enqueue(50);
            CustomQueue.Enqueue(60);
            CustomQueue.Dequeue();
            CustomQueue.Dequeue();
            CustomQueue.Dequeue();
            CustomQueue.Dequeue();
            CustomQueue.Dequeue();
            CustomQueue.Dequeue();
            CustomQueue.Peek();

            Console.WriteLine(q.ToString());

            /**************
            *
            * END OF QUEUE
            *
            * ************/



            /***
             * Stack implementation
             */
            /*Stack MyStack = new Stack(5);
             * MyStack.Push(20);
             * MyStack.Push(10);
             * MyStack.Push(1);
             * MyStack.Push(6);
             * MyStack.Push(12);
             * MyStack.Push(76);
             * Console.WriteLine(MyStack.ToString());
             * //MyStack.Pop();
             * //MyStack.Pop();
             * //MyStack.Pop();
             * Console.WriteLine(MyStack.ToString());*/
            /**************
            *
            * END OF STACK
            *
            * ************/

            /**************
            *
            * PRIME NUMBERS
            *
            * ************/
            //Console.WriteLine ("PRIME NUMBER OPERATIONS");
            //Console.WriteLine("Is 4567679111 a Prime Number " + PrimeNumbers.IsPrime(456767911));
            //PrimeNumbers.PrintPrimeNumberBtn100and500();

            /******
             * LINKEDLIST
             *
             * ********/
            SingleLinkedList singleLinkedList = new SingleLinkedList("Initial Value");

            singleLinkedList.AddNodeFirst("Samuel1");
            singleLinkedList.AddNodeFirst("Samuel2");
            singleLinkedList.AddNodeFirst("Samuel3");
            singleLinkedList.AddNodeFirst("Samuel4");
            //singleLinkedList.PrintListValues();
            //singleLinkedList.RemoveFirst();
            singleLinkedList.RemoveLast();
            singleLinkedList.PrintListValues();
            Console.WriteLine("============================Before");
            Node matechedNode1 = singleLinkedList.FindNode("Samuel1");

            singleLinkedList.AddBefore(matechedNode1, "MaShalby", true);
            Console.WriteLine("============================After");
            singleLinkedList.AddAfter(matechedNode1, "MaShalby", true);
            //  Console.WriteLine("Matched Node= " + matechedNode1.ToString());
            Console.WriteLine("List size is: " + singleLinkedList.Size());
            Console.WriteLine("End of the first list");

            SingleLinkedList singleLinkedList2 = new SingleLinkedList("Initial last value ");

            Console.WriteLine("AddNodeLast.............: " + singleLinkedList2.Size());
            singleLinkedList2.AddNodeLast("last Samuel 2");
            singleLinkedList2.AddNodeLast("last Samuel3");
            singleLinkedList2.AddNodeLast("last Samuel4");

            //singleLinkedList2.AddNodeLast("last AddNodeLast");
            //singleLinkedList.Remove("Sam");
            Console.WriteLine("AddNodeLast......SIZE.......: " + singleLinkedList2.Size());
            //singleLinkedList2.PrintListValues();
            //singleLinkedList2.Remove("last Samuel4");
            //singleLinkedList2.PrintListValues();
            Node matechedNode = singleLinkedList2.FindNode("last Samuel3");

            Console.WriteLine("Matched Node= " + matechedNode.ToString());
            //Console.WriteLine("Remove Node Above Node:  ");
            singleLinkedList2.PrintListValues();
            singleLinkedList2.AddAfter(matechedNode, "SHALBY", true);
            //singleLinkedList2.PrintListValues();
            //singleLinkedList2.removeNode(matechedNode,true);
            singleLinkedList2.Find("last Samuel3");
            //singleLinkedList2.Find("SHALBY");



            /*******
            * BINARY TREE OPERATIONS
            *
            * *****/
            Console.WriteLine("ADVANCE DATASTRUCTURE");
            Console.WriteLine("BINARY TREE");
            TreeNode BinaryTree = new TreeNode(19);

            BinaryTree.Insert(33);
            BinaryTree.Insert(3);
            BinaryTree.Insert(9);
            BinaryTree.Insert(0);
            BinaryTree.Insert(-1);
            BinaryTree.Insert(20);
            //INORDER
            BinaryTree.PrintInorder();
            // Search
            string IsFound = BinaryTree.Contain(20) == true?"Found":"Not Found";

            Console.WriteLine(IsFound);

            /*********
             *
             * Graph Datastructure
             *
             * ********/
            Console.WriteLine("Graph Opertations");
            Graph g = new Graph(4);

            g.AddEdge(0, 1);
            g.AddEdge(1, 2);
            g.AddEdge(2, 3);
            g.AddEdge(3, 0);
            // Print Graph Values
            g.DisplayGraph();


            Console.ReadKey();
        }