将顺序结构打印成完全二叉树
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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律