1147 Heaps(判断完全二叉树是大顶堆?小顶堆?非堆?)
1 #include<iostream> 2 using namespace std; 3 int m,n,cbt[1010],num; 4 void postOrder(int root) { 5 if(root > n) return; 6 postOrder(root*2); 7 postOrder(root*2+1); 8 if(num > 0) printf(" "); 9 printf("%d",cbt[root]); 10 num++; 11 } 12 int main() { 13 cin>>m>>n; 14 for(int i = 0; i < m; ++i) { 15 for(int j = 1; j <= n; ++j) 16 cin>>cbt[j]; 17 int isMax = 1,isMin = 1; 18 for(int j = 2; j <= n; ++j) { 19 if(cbt[j] > cbt[j/2]) isMax = 0; 20 if(cbt[j] < cbt[j/2]) isMin = 0; 21 } 22 if(isMax) printf("Max Heap\n"); 23 else if(isMin) printf("Min Heap\n"); 24 else printf("Not Heap\n"); 25 num = 0; 26 postOrder(1); 27 printf("\n"); 28 } 29 return 0; 30 }
总结:
1144:考察了借助散列。
1145:考察了散列中的正向平方探查法(pos = (data+k*k) mod Tablesize)的内容,计算查找成功和失败的查找次数之和,注意 查找插入位置时,k~【0,Tablesize-1】,计算查找次数时,k~【0,Tablesize】
1146:考察了拓扑排序,核心就是找 入度为 0的顶点。
1147:考察堆排序,判断完全二叉树是大顶堆,小顶堆还是非堆。