Вот приблизительный псевдокод, чтобы сделать это. Основная идея состоит в том, чтобы погулять дерево поэтапно, распечатывая весь узел в каждом слое на одной строке. Каждый узел разделяется в два раза больше места, чем узлы под ним. Так как дерево не имеет одинаковой глубины, оно искусственно дополняется виртуальными узлами для заполнения пустых пространств, где узлов не существует.
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
Ссылка и изображение мертвы – Jacob