Вот примерный псевдокод для этого. Основная идея состоит в том, чтобы пройтись по дереву послойно, печатая все узлы в каждом слое в одну строку. Каждый узел разделен вдвое больше места, чем узлы под ним. Поскольку дерево не все одинаковой глубины, оно искусственно заполнено виртуальными узлами, чтобы занять пустые места, где узлов не существует.
measure the depth of the tree, call that D
have two queues, called Q1 and Q2
enque the top node of the tree in Q1
for (i = D; --i>=0; ){
foreach node in Q1 {
on first iteration of this inner loop, print 2^i - 1 spaces,
else print 2^(i+1) - 1 spaces.
if node == null print blank
else print node.value
if node.left exists enque node.left in Q2
else enque null in Q2
if node.right exists enque node.right in Q2
else enque null in Q2
}
copy Q2 to Q1
clear Q2
print end-of-line
}
Каждое печатное место является шириной одного числового поля. Предположим, что дерево имеет глубину D = 4. Тогда печать идет так:
// it looks like this, and the space sequences are
i = 3: -------n 7
i = 2: ---n-------n 3 7
i = 1: -n---n---n---n 1 3 3 3
i = 0: n-n-n-n-n-n-n-n 0 1 1 1 1 1 1 1