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()); }
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()); } } }