2015-05-18 66 views
0

我已提取使用BFS打印一个漂亮的树

溶液树列表= [[6],[0,7],[无,3,无,8],[2,5,无,9],[1,没有,4,None,None,None],[None,None,None,None]

如何将它打印为横向树?

Desired Output

我试图用

def _print_tree(n=0,height,solution): 
    if n > height: 
     return 
    for j in range(len(solution[n])): 
     if solution[n][j]== None: 
       print(' ' * (2 ** (height - n + 1) - 1),end='')     
     else: 
       print(' ' * (2 ** (height - n + 1) - 1), end='') 
       print(' ',solution[n][j], end='') 

打印,但它给了

Output

回答

1

我玩耍了,这里是结果

nonechar = 'N' 
spacechar = '_' 

solution = [[6], [0, 7], [None, 3, None, 8], [2, 5, None, 9], [1, None, 4, None, None, None], [None, None, None, 4],[None, 3]] 

for i in range(1, len(solution)): 
    for j in range(len(solution[i-1])): 
     if (solution[i-1][j] == None): 
      solution[i].insert(2*j, None) 
      solution[i].insert(2*j+1, None) 
N = len(solution[-1]) * 2 - 1 
offset = (N - 1)/2 
spacing = 0 
for i in range(len(solution)): 
    line = spacechar * int(offset) 
    for j in range(len(solution[i])): 
     if (solution[i][j] == None): 
      line += nonechar 
     else: 
      line += str(solution[i][j]) 
     if (j != len(solution[i]) - 1): 
      line += spacechar * int(spacing) 
    line += spacechar * int(offset) 
    print(line) 
    spacing = offset 
    offset = (offset - 1)/2 

我基本上做的是用缺少的数据填充解决方案列表,以便每个下一个子列表的值比前一个值多两倍。对于i第一个子列表中的每个j第012个元素,都有[i+1][2*j][i+1][2*j+1]下的值。然后我使用ASCII艺术打印出结果,计算出所需的偏移量和间距。这里的限制是,你只能使用数字0-9,以免搞乱我的树。你必须找出解决方法,你自己:)

哦,是的。输出看起来像这样(随意更改缺少值和空格的字符):

_______________________________________________________________6_______________________________________________________________ 
_______________________________0_______________________________________________________________7_______________________________ 
_______________N_______________________________3_______________________________N_______________________________8_______________ 
_______N_______________N_______________2_______________5_______________N_______________N_______________N_______________9_______ 
___N_______N_______N_______N_______1_______N_______4_______N_______N_______N_______N_______N_______N_______N_______N_______N___ 
_N___N___N___N___N___N___N___N___N___N___N___N___N___4___N___N___N___N___N___N___N___N___N___N___N___N___N___N___N___N___N___N_ 
N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_3_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N_N