仅做混满分之用,可读性差,书写不规范,我自己也看不懂了。。。
sta=int(input())
nl=list(int(x)for x in input().split())
nl=sorted(nl)
i=1
while True:
if 2**i-1>=sta:
break
else:
i+=1
class tn:
def __init__(self,num):
self.num=num
self.left=[]
self.right=[]
def create(nl,floor):
if floor==1:
return tn(nl[0])
else:
summ=len(nl)
pre=2**(floor-1)-1
lastline=summ-pre
if lastline<=2**(floor-2):
left=(pre-1)//2+lastline
else:
left=(pre-1)//2+2**(floor-2)
leftlist=nl[0:left]
rightlist=nl[left+1:len(nl)]
prenode=tn(nl[left])
prenode.left=create(leftlist,floor-1)
if rightlist:
if summ-left-1>2**(floor-2)-1:
prenode.right=create(rightlist,floor-1)
else:
prenode.right = create(rightlist, floor - 2)
return prenode
gettree=create(nl,i)
stand=[gettree]
outlist=[]
while stand:
pre=stand[0]
del stand[0]
if pre.left:
stand.append(pre.left)
if pre.right:
stand.append(pre.right)
outlist.append(pre.num)
out=list(str(x) for x in outlist)
print(' '.join(out))