6.2-1
(a)初始状态,在结点
i=3
处,
A[3]
违背了最大堆性质,因为它的值小于他的左孩子,所以将
A[3]和A[6]
互换一下,得到新的序列为
A′=<27,17,10,16,13,3,1,5,7,12,4,8,9,0>
(b)递归调用MAX-HEAPIFY(A,6),此时
i=6,A[6]<A[12]<A[13]
,故调换
A[6]和A[13]
得到
A′′=<27,17,10,16,13,9,1,5,7,12,4,8,3,0>
。此时
A′′
满足最大堆性质。
6.2-2
伪代码为:
MIN-HEAPIFY(A,i)
1 l=LEFT(i)
2 r=REGHT(i)
3 if l<=A.length and A[l]<A[i]
4 least = l
5 else least = i
6 if r<=A.length and A[r]<A[least]
7 least=r
8 if least 不等于 i
9 exchange A[i] with A[least]
10 MIN_HEAPIFY(A,least)
运行时间与MAX-HEAPIFY(A,i)相同,也为 T(n)=O(lgn)
6.2-3
没有影响。
6.2-4
没有影响,因为下标为 i>A.heap−size/2 的节点都是叶子结点
6.2-5
MAX-HEAPIFY(A,i)
1 while (true)
2 l = LEFT(i)
3 r = RIGHT(i)
4 if l <= A.heap-size and A[l] > A[i]
5 largest = l
6 else largest = i
7 if r <= A.heap-size and A[r] >A[largest]
8 largest = r
9 if largest == i
10 return
11 exchange A[i] with A[largest]
11 i = largest
6.2-6
我们假设该堆的最左边这一条线上的元素是按严格升序排列的,那么在这棵树的每一层都需要调用一次MAX-HEAPIFY,由于大小为
n
的堆的高度为