赞
踩
题目:给定完全二叉树的层序遍历,判断是否是最大堆、最小堆or不是堆
思路:利用堆的性质 1.完全二叉树 2.根节点大于or小于子节点,从子节点向上遍历判断
- #include<iostream>
- #define MAXM 1010
- using namespace std;
- int a[MAXM];
- int ct=0;
- void postOrder(int start,int endp){
- if(start>endp) return;
- postOrder(start*2,endp);
- postOrder(start*2+1,endp);
- if(ct==0) cout<<a[start];
- else cout<<" "<<a[start];
- ct++;
- }
- int main(){
- int n,m;
- cin>>n>>m;
- for(int i=0;i<n;i++){
- for(int j=1;j<=m;j++){
- cin>>a[j];
- }
- int maxH=1,minH=1;
- for(int j=m;j>1;j--){
- if(a[j]>a[j/2]) maxH=0;
- if(a[j]<a[j/2]) minH=0;
- if(!maxH&&!minH) break;
- }
- if(maxH)cout<<"Max Heap\n";
- if(minH)cout<<"Min Heap\n";
- if(!maxH&&!minH) cout<<"Not Heap\n";
- ct=0;
- postOrder(1,m);
- cout<<"\n";
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。