L3-010. 是否完全二叉搜索树

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。

输入格式:

输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。

输出格式:

将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出“YES”,如果该树是完全二叉树;否则输出“NO”。

输入样例1:

9
38 45 42 24 58 30 67 12 51

输出样例1:

38 45 24 58 42 30 12 67 51
YES

输入样例2:

8
38 24 12 45 58 67 42 51

输出样例2:

38 45 24 58 42 12 67 51
NO

————————————————————————————————————

大体思路:根据题目所给意思建立二叉树,层次遍历,判断是否完全

数组模拟写法:

#include<map>
#include<set>
#include<ctime>
#include<cmath>
#include<queue>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
#define inf 0x3f3f3f3f int tree[10000000];
int n,mx; void build(int x)
{
int pos=1;
while(tree[pos]!=-1)
{
if(x>tree[pos])
pos*=2;
else
pos=pos*2+1;
}
tree[pos]=x;
mx=max(mx,pos);
} int main()
{
int a[100];
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
memset(tree,-1,sizeof tree);
mx=0;
for(int i=0;i<n;i++)
{
build(a[i]);
}
int cnt=0,q=0;
for(int i=1;i<=mx;i++)
{
if(tree[i]!=-1)
{
if(q++)
printf(" ");
printf("%d",tree[i]);
}
else
{
cnt++;
} }
printf("\n");
if(cnt==0)
printf("YES\n");
else
printf("NO\n"); return 0;
}

数组模拟链表:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std; struct node
{ int data,lch,rch; } tree[100];
int n,pos;
void build(int a)
{
int k=0;
while(1)
{
if(a>tree[k].data)
{
if(tree[k].lch==-1)
{
tree[++pos].data=a;
tree[k].lch=pos;
break;
}
else
{
k=tree[k].lch;
}
}
else
{
if(tree[k].rch==-1)
{
tree[++pos].data=a;
tree[k].rch=pos;
break;
}
else
{
k=tree[k].rch;
}
}
}
} void bfs()
{
queue<int>q;
q.push(0);
int f;
int qq=0;
int flag=0,fl=0;
while(!q.empty())
{
f=q.front();
q.pop();
if(f==-1)
{
flag=1;
}
else
{
if(qq++)
printf(" ");
printf("%d",tree[f].data);
q.push(tree[f].lch);
q.push(tree[f].rch);
if(flag==1)
fl=1;
}
}
if(fl==1)
printf("\nNO\n");
else
printf("\nYES\n");
} int main()
{
int a;
scanf("%d",&n);
memset(tree,-1,sizeof tree);
pos=0;
scanf("%d",&tree[0].data);
for(int i=1; i<n; i++)
{
scanf("%d",&a);
build(a);
}
bfs(); return 0;
}

团体程序设计天梯赛L3-010 是否完全二叉搜索树 2017-03-24 16:12 29人阅读 评论(0) 收藏的更多相关文章

  1. 团体程序设计天梯赛L2-002 链表去重 2017-03-22 18:12 25人阅读 评论(0) 收藏

    L2-002. 链表去重 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个带整数键值的单链表L,本题要求你编写程序,删除 ...

  2. PAT天梯赛练习题 L3-010. 是否完全二叉搜索树(完全二叉树的判断)

    L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...

  3. 团体程序设计天梯赛L2-021 点赞狂魔 2017-04-18 11:39 154人阅读 评论(0) 收藏

    L2-021. 点赞狂魔 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 微博上有个"点赞"功能,你可以为你 ...

  4. 团体程序设计天梯赛L2-024 部落 2017-04-18 11:31 274人阅读 评论(0) 收藏

    L2-024. 部落 时间限制 120 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不 ...

  5. 团体程序设计天梯赛L2-023 图着色问题 2017-04-17 09:28 269人阅读 评论(0) 收藏

    L2-023. 图着色问题 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 图着色问题是一个著名的NP完全问题.给定无向图 G ...

  6. 团体程序设计天梯赛L1-020 帅到没朋友 2017-03-22 17:46 72人阅读 评论(0) 收藏

    L1-020. 帅到没朋友 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为 ...

  7. 团体程序设计天梯赛L1-019 谁先倒 2017-03-22 17:35 33人阅读 评论(0) 收藏

    L1-019. 谁先倒 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳 ...

  8. 团体程序设计天梯赛L1-017 到底有多二 2017-03-22 17:31 155人阅读 评论(0) 收藏

    L1-017. 到底有多二 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一个整数"犯二的程度"定义为该数 ...

  9. 团体程序设计天梯赛L1-018 大笨钟 2017-03-22 17:29 79人阅读 评论(0) 收藏

    L1-018. 大笨钟 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 微博上有个自称"大笨钟V"的家伙,每 ...

随机推荐

  1. Java web概述

    声明:为了使初学者能更好的了解java web,所以我整理了下资料,概述了web应用程序. 一.web概述 静态web资源:内容是静态的,不同的人在不同的时间来访问时都是相同的内容.HTML.CSS. ...

  2. 2_python之路之多级菜单

    python之路之多级菜单 1.使用知识点 (1)列表,字典的使用 (2)if条件判断语句 (3)for/while循环的使用 2.代码详细 #!/usr/bin/env python # _*_ c ...

  3. zabbix agent主动模式与proxy模式,实现公网zabbix监控私网客户机

    zabbix agent主动模式,实现公网zabbix监控私网客户机 zabbix_server端当主机数量过多的时候,由Server端去收集数据,Zabbix会出现严重的性能问题,主要表现如下:  ...

  4. 再次理解HTTP GET协议

    概述: 在上学的时候,以及在工作的这几年中,我一直错误了理解HTTP GET. 以前我的认知中认为GET/POST的区别在于: 1.GET长度限制 2.GET和POST的请求方式不一样(之前所理解的G ...

  5. HTML——标签

    列表标签: 1,无序列表<ul>,无序列表中的每一项是<li> <ul> <li>顾清秋</li> <li>顾小白</li ...

  6. eclipse 使用lombok 精简java bean

    前言:             lombok 提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码.特别是相对于 POJO             lombok 的官方网址 ...

  7. linux weather

  8. nrm操作

    nrm操作 nrm use cnpm // 选择镜像nrm ls //查看镜像

  9. Django 学习之---缓存系统

    一.浏览器缓存机制 Cache-control策略(重点关注) Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务 ...

  10. Makefile里面打印信息

    Makefile的规则相对来说还是比较复杂的,上手不容易,没有系统研究过,往往搞不清楚状况.如果掌握了基本的调试手段,那对我们写出正确的Makefile会非常有帮助.而在Makefile中,最重要的调 ...