Вы можете думать о распечатке бинарного дерева по уровням как поиск в ширину дерева, начинающегося в корне. При поиске в ширину вы исследуете все узлы на расстоянии один от корня до узлов на расстоянии два, а узлы на расстоянии два от корня до узлов на расстоянии три и т. Д.
На самом деле я не знаю программирования на Python, но псевдокод для этого алгоритма довольно прост. Учитывая, что Python по сути является исполняемым псевдокодом, я не могу себе представить, насколько сложно преобразовать его в легальный Python. : -)
Create a queue Q of nodes to visit.
Enqueue the tree root into Q.
While Q is not empty:
Dequeue an element from the queue, call it u.
Output u.
If u has a left child, add that to the queue.
If u has a right child, add that to the queue.
Надеюсь, это поможет! И извинения за отсутствие реального кода; изучение Python все еще в моем списке TODO.