题目:给定完全二叉树的层序遍历序列,输出从右向左的每条 从根节点到子节点的路径 ,并判断这棵树是否是最大堆和最小堆
#include<iostream>
#include<vector>
#define MAXN 1010
using namespace std;
int a[MAXN];
int n;
vector<int> path;
void dfs(int start,int endp){
if( (start*2+1>endp)&& (start*2>endp)){
for(int i=0;i<path.size();i++){
cout<<path[i]<<" ";
}
cout<<a[start];
cout<<endl;
}
path.push_back(a[start]);
if(start*2+1<=endp) dfs(start*2+1,endp);
if(start*2<=endp) dfs(start*2,endp);
path.pop_back();
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
//1.从右向左打印每条 从根节点到叶子结点的路径
dfs(1,n);
//2.判断是否是堆,什么堆
int maxHeap=1,minHeap=1;
for(int i=n;i>1;i--){
if(a[i]>a[i/2]) maxHeap=0;
if(a[i]<a[i/2]) minHeap=0;
if(!maxHeap&&!minHeap){
cout<<"Not Heap";
break;
}
}
if(maxHeap)cout<<"Max Heap";
if(minHeap)cout<<"Min Heap";
return 0;
}