#堆排序1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31def adjustDown(a,int i, int N):
#找到i节点的子节点
j = i * 2 +1
while j < N:
#找到两个子节点中最小的那个
if j + 1 < N and a[j] > a[j+1]:
j +=1
#如果父节点是最小的了,说明符合条件,则不进行交换
if a[i] < a[j]:
break
#父节点和最小的子节点进行交换
swap(i,j)
#继续判断交换后的子节点的子树情况
i = j
j = j * 2 +1
def makeHeap(a,N):
#找到该数组中的最后一个非叶子节点
i = N /2 -1
#从这个叶子节点开始判断调整堆
for j in range(i,0,-1):
adjustDown(a,i,N)
def HeapSort(a):
N = len(a)
#开始建堆
makeHeap(a,N)
#每次取出堆顶点,与最后的节点交换,再重新调整堆
for i in range(N-1,0,-1):
swap(0,i)
adjustDown(a,0,i)
#二叉树遍历
1 | class Node: |
###已知二叉树的前序遍历和中序遍历,求这棵二叉树的后序遍历
1 | preList = list('12473568') |