public void PrintLevelWise()
        {
            // prints the levelwise traversal of a tree
            if (root == null)
            {
                Console.WriteLine("Tree is empty dude!!!");
                return;
            }
            // TODO virtual abstract difference
            // TODO what is the difference between const reference and const memory (aka read only)

            Queue <TreeNode <int> > nodesToProcess = new Queue <TreeNode <int> >();
            const TreeNode <int>    MARKER         = null;

            nodesToProcess.Enqueue(root);
            nodesToProcess.Enqueue(MARKER);

            while (nodesToProcess.Count != 0)
            {
                TreeNode <int> curNode = nodesToProcess.Dequeue();

                if (curNode == MARKER)
                {
                    // this is null and the curLevel HAS BEEN printed
                    // this also means that children of curLevel are pushed into Queue
                    Console.WriteLine();
                    if (nodesToProcess.Count != 0)
                    {
                        nodesToProcess.Enqueue(MARKER);
                    }
                    continue;
                }

                Console.Write(curNode.GetData() + " ");

                if (curNode.GetLeft() != null)
                {
                    nodesToProcess.Enqueue(curNode.GetLeft());
                }
                if (curNode.GetRight() != null)
                {
                    nodesToProcess.Enqueue(curNode.GetRight());
                }
            }
        }
 private void PrintInOrder(TreeNode <int> root)
 {
     if (root == null)
     {
         return;
     }
     PrintInOrder(root.GetLeft());
     Console.Write(root.GetData() + " ");
     PrintInOrder(root.GetRight());
 }
Exemplo n.º 3
0
        private void printLevelOrder(TreeNode <int> root)
        {
            const TreeNode <int> MARKER = null;

            if (root == null)
            {
                return;
            }
            Queue <TreeNode <int> > displayQueue = new Queue <TreeNode <int> >();

            displayQueue.Enqueue(root);
            displayQueue.Enqueue(MARKER);

            while (displayQueue.Count != 0)
            {
                TreeNode <int> currentNode = displayQueue.Dequeue();
                if (currentNode == MARKER)
                {
                    Console.WriteLine();
                    if (displayQueue.Count != 0)
                    {
                        displayQueue.Enqueue(MARKER);
                    }
                    continue;
                }
                Console.Write(currentNode.GetData() + " ");
                if (currentNode.GetLeft() != null)
                {
                    displayQueue.Enqueue(currentNode.GetLeft());
                }
                if (currentNode.GetRight() != null)
                {
                    displayQueue.Enqueue(currentNode.GetRight());
                }
            }
        }