将顺序结构打印成完全二叉树

  

 

dip=[x for x in range(1,10)]
import math def jum(b): depth
=math.ceil(math.log2(len(b)+1)) width=2**depth-1 print(depth,width) index=0 # 记录每次打印的索引 for x in range(depth): for v in range(2**x): #end=' '的原因是width整除后每次少了一个空格,需在每次打印后不上 print('{:^{}}'.format(b[index],width),end=' ') index+=1 # index==len(b)的时候索引刚好超标 if index==len(b): break print() width//=2

 

 

 

 

dip=[x+10*x for x in range(1,10)]
import math
def juc(b):
    b.insert(0,'$') # 索引0处插入一个元素,使有效索引从1开始
    # 插入了一个元素,所以直接为len(b)
    depth=math.ceil(math.log2(len(b)))
    sep=' '*2 # 定义分隔符间距
    index=1 # 记录每行开始的索引位置
    
    for v in range(depth):
        print(sep*(2**(depth-v-1)-1),end='') #打印前导空格
        offset=2**v # offset为每行元素的个数
        line=b[index:index+offset] # line为每行要打印的元素,切片为新列表
        for p,z in enumerate(line):
            print('{:>{}}'.format(z,len(sep)),end='')
            # 打印每个元素后的的间距
            interval=0 if v==0 else 2**(depth-v)-1
            
            if p<len(line)-1: # 最后一个元素前,才打印interval
                print(sep*interval,end='')
        index+=offset # 更新索引位置
        print()
juc(dip)

 

 

 

posted @ 2020-09-06 22:23  ascertain  阅读(211)  评论(0编辑  收藏  举报