05-树7 堆中的路径
课上的例题。
1 #include <stdio.h> 2 3 #define MaxN 1001 4 #define MinH -10001 5 6 int H[MaxN], size; 7 8 void Create(); 9 void Insert(int X); 10 void Print(int K); 11 12 int main() 13 { 14 int N, M, K, i, data; 15 scanf("%d %d", &N, &M); 16 17 Create(); // 堆初始化 18 19 for ( i = 0; i < N; i++ ) { // 以逐个插入的方式建 堆 20 scanf("%d", &data); 21 Insert(data); 22 } 23 for ( i = 0; i < M; i++ ) { // 按 路径 打印 24 scanf("%d", &K); 25 Print(K); 26 } 27 28 return 0; 29 } 30 31 void Insert(int X) 32 { /* 将 X 插入H, 这里省略检查堆是否已满的代码 */ 33 int i; 34 35 for ( i = ++size; H[i/2] > X; i /= 2 ) 36 H[i] = H[i/2]; 37 H[i] = X; 38 } 39 40 void Print(int K) 41 { 42 int flag = 1; 43 for ( ; K >= 1; K /= 2 ) { 44 if ( flag ) 45 flag = 0; 46 else 47 printf(" "); 48 printf("%d", H[K]); 49 } 50 printf("\n"); 51 } 52 53 void Create() 54 { 55 size = 0; 56 H[0] = MinH; // 设置 "岗哨" 57 }