PAT题目目录
判断是非为堆,进一步判断是否为大根堆、小根堆。
1用数组存储这个完全二叉树;
2遍历,找出所有从根节点到叶节点的路径,同时用(bool) gt lt记录是否存在当前节点比前一个结点大或小的情况;
3根据gt lt的状态判断是否为堆、大根堆、小根堆。
#include#include using namespace std; const int N=1e3+10; int n; vector path; int h[N]; bool gt,lt; void dfs(int u){ path.push_back(h[u]); if(u*2>n){ //叶节点 cout< cout<<' '< path[i-1]) gt=true; else if(path[i] cin>>n; for(int i=1;i<=n;i++){ cin>>h[i]; } dfs(1);//1为序号 if(gt&<) cout<<"Not Heap"; else if(gt) cout<<"Min Heap"; else cout<<"Max Heap"; return 0; }



