#define leftchild(i) ( 2*(i)+1 ) void BuildMinHeap( ElementType A[], int N ) { int i, j, child; ElementType Tmp; for ( i = (N-1)/2; i >= 0; i-- ) { j = i; for ( Tmp = A[j]; leftchild(j) < N; j = child ) { child = leftchild(j); if ( ) child ++; if ( ) A[j] = A[child]; else break; } ; } }填完这段代码
时间: 2024-03-12 14:50:25 浏览: 81
这段代码是一个建立最小堆的函数,需要填写两个条件的判断语句。
第一个条件判断语句需要比较左右子节点的大小,如果右子节点比左子节点小,需要返回右子节点的下标。
第二个条件判断语句需要比较当前节点和其较小的子节点的大小,如果当前节点比其子节点大,需要将当前节点和其子节点交换位置。
下面是填好代码的函数:
```
#define leftchild(i) ( 2*(i)+1 )
void BuildMinHeap( ElementType A[], int N ) {
int i, j, child;
ElementType Tmp;
for ( i = (N-1)/2; i >= 0; i-- ) {
j = i;
for ( Tmp = A[j]; leftchild(j) < N; j = child ) {
child = leftchild(j);
if (child+1 < N && A[child+1] < A[child])
child ++;
if ( A[child] < Tmp )
A[j] = A[child];
else
break;
}
A[j] = Tmp;
}
}
```
阅读全文