您的位置:首页 > 其它

codevs 2977 二叉堆练习1x

2017-03-31 17:54 232 查看

时间限制: 10 s

空间限制: 32000 KB 题目等级 : 白银 Silver       题目描述 Description

已知一个二叉树,判断它是否为二叉堆(小根堆)

输入描述 Input Description

二叉树的节点数N和N个节点(按层输入)

输出描述 Output Description

YES或NO

样例输入 Sample Input

样例输入1

3

1 4 9

样例输入2

3

6 4 9

样例输出 Sample Output

样例输出1

YES

样例输出2

NO

数据范围及提示 Data Size & Hint

对于20%的数据  N≤20

对于50%的数据  N≤1000

对于100%的数据 N≤50000,每个节点≤10000

分类标签 Tags 点此展开 

代码如下

#include <cstdlib>
#include <cstdio>
#include <iostream>

using namespace std;

int n,tree[100001],bb,n1;

int pd()//是否为小根堆
{
for (int i=n1-1; i>=2; i--)
{
if (tree[i]>tree[i/2] && !bb) return 0;//当n为0时
if (tree[i]<tree[i/2] && bb) return 0;
}
return 1;
}

int main()
{
scanf("%d",&n);
n1=n;
for (int i=1; i<=n; i++)
scanf("%d",&tree[i]);
while (tree[n1]==tree[n1/2]) n1--;
if (tree[n1]>tree[n1/2]) bb=1;
if (pd()) cout<<"YES";
else cout<<"NO";
return 0;
}

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: