data = [3, 7, 5, 16, 13, 16, 24, 20]
def addBlankAndAppend(List,addStr):
for i in range(len(List)):
List[i] = " " + List[i] +" "
List.append(addStr)
def printHeap(List, limit): #limit can be len(List)
printLi = []
levelStart = 0
levelCount = 1 #每层节点的个数,2 的幂
levelLimit = 1 #每层节点索引的限制
while(levelStart < limit):
levelStr = ""
for levelItem in range(levelStart, min(levelLimit, limit)):
levelStr += str(List[levelItem])+" "
levelStr = levelStr[:-1]
if levelStart != 0:#只要不是第一层就加上指针
pointerStr = ""
for i in range(int(levelCount/2)):
pointerStr += "/ \ "
pointerStr = pointerStr[:-1]
addBlankAndAppend(printLi, pointerStr)
addBlankAndAppend(printLi, levelStr)
levelCount = levelCount << 1
levelStart = levelCount - 1
levelLimit += levelCount
for item in printLi:
print(item)
printHeap(data,len(data))
好像实现有点问题,不过将就也能方便看了。
3
/ \
7 5
/ \ / \
16 13 16 24
/ \ / \ / \ / \
20
想改一下,又不知道咋改了
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.