将顺序结构打印成完全二叉树
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)