PAT 甲级 1147 Heaps

题意大概就是给定一棵二叉树判断它是不是大顶堆或者小顶堆,然后后序遍历输出一下。
直接递归先判断是不是大顶堆,然后判断是不是小顶堆,都不是输出Not Heap,最后接一个后续遍历。直接贴代码

#include<bits/stdc++.h>
using namespace std;
	int a[1005];
		int n,m;
		int flagd=1,flagx=1;	
int qddd(int root){
	int maxl=-9999999,maxr=-9999999;
	if( (root << 1) <= m) 	  maxl = qddd(root << 1);
	if( (root << 1 | 1) <= m)      maxr = qddd(root <<1 | 1);
	int temp=max(maxl,maxr);
	if(a[root]<temp) flagd = 0;
	return max(a[root],temp);
}
int qxdd(int root){
	int maxl=9999999,maxr=9999999;
	if( (root << 1) <= m) 	  maxl = qxdd(root << 1);
	if( (root << 1 | 1) <= m)      maxr = qxdd(root <<1 | 1);
	int temp=min(maxl,maxr);	
	if(a[root]>temp) flagx = 0;
	return min(a[root],temp);
} 
int end_search(int root){
	if((root << 1) <= m) end_search(root<<1);
	if((root << 1 | 1) <= m) end_search(root<<1|1);
	cout<<a[root];
	if(root != 1) cout<<" "; 
	else cout<<endl;
}
int main()
{

	cin>>n>>m;
	while(n--)
	{
		for(int i=1;i<=m;i++)
			cin>>a[i];
		flagd=flagx=1;
		 qddd(1);
		 qxdd(1);
		if(flagd) cout<<"Max Heap"<<endl;
	    if(flagx) cout<<"Min Heap"<<endl;
	    if(!flagd && !flagx) cout<<"Not Heap"<<endl;
	    end_search(1);
	}
}

猜你喜欢

转载自blog.csdn.net/youcaishen/article/details/83819790
今日推荐