按层次结构打印二叉树,如下面这棵
class Node:
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
def __str__(self):
return str(self.val)
def prt_bin_tree(root, str_levels, level=0, output_num=0):
if root is None:
return 0
def output(str_levels, node, pos, level):
s = str_levels[level]
def expand_str(s, n):
l = len(s)
while l <= n:
s+=' '
l+=1
return s
s = expand_str(s, pos-1)
s+=str(node.val)
str_levels[level] = s
left_output_num = prt_bin_tree(root.left, str_levels, level+1, output_num)
output(str_levels, root, output_num + left_output_num, level)
right_output_num = prt_bin_tree(root.right, str_levels, level+1, output_num + left_output_num +1)
return left_output_num + right_output_num + 1
if __name__ == "__main__":
from collections import defaultdict
d = defaultdict(str)
prt_bin_tree(root, d)
for k, v in sorted(d.items()):
print(v)
输出结果:
1
2 3
4 5 6
7 8