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 }

 

posted @ 2018-11-21 20:25  望汐  阅读(178)  评论(0编辑  收藏  举报