Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>As sbi mentioned, making a left-aligned version is easier than a center-aligned one. But whichever alignment you choose your fundamental algorithmic approach should be:</p> <p>Traverse the tree breadth-first. Do this by using a queue with the following algorithm:</p> <ol> <li>Declare a queue</li> <li>Add the root node to the queue</li> <li>While the queue contains more nodes, do 4 - 6:</li> <li>Dequeue a node</li> <li>Print the node. After every print that is one less than a power of 2th time (starting from 1), also print a newline.</li> <li>Enqueue the node's children</li> </ol> <p>(See <a href="http://www.cs.bu.edu/teaching/c/tree/breadth-first/" rel="nofollow">http://www.cs.bu.edu/teaching/c/tree/breadth-first/</a> )</p> <p>In order to print a center-aligned tree, also do the following (only works if the tree is complete. If it's not complete, the easiest thing to do is make a complete copy where every place that should have a node gets some kind of a null node):</p> <ul> <li>Instead of printing to the screen, "print" each line into a string in an array of strings.</li> <li>As you go, keep track of the length in characters of the longest element you print. Let's call this maxElemLen.</li> <li>Whenever you print an element, print one tab character before it and one tab character after it.</li> <li>At the very end, go back, and in every line in the array, replace each tab character with 2^(nLines - lineNum) tab characters.</li> <li>Then expand each tab that comes after a tab or newline to maxElemLen+1 spaces, and expand each tab that comes after anything else (i.e., after a printed elem) to (maxElemLen + 1 - (the number of characters elapsed since the last tab)) spaces.</li> <li>Finally, print each line of your array, in order.</li> </ul>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload