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. socket-简单实现

    server--------------#!/usr/bin/env python # encoding: utf-8  # Date: 2018/6/7 from socket import * s ...

  2. 关于mongodb ,redis,memcache之间见不乱理还乱的关系和作用

    先说我自己用的情况: 最先用的memcache ,用于键值对关系的服务器端缓存,用于存储一些常用的不是很大,但需要快速反应的数据 然后,在另一个地方,要用到redis,然后就去研究了下redis. 一 ...

  3. Linux的bond模式绑定及模式区别

    [Linux的bond模式配置] 原理: 多块网卡虚拟成一张,实现冗余:多张网卡对外显示一张,具有同一个IP: 工作在网卡是混杂模式的情况下: 对于多物理网卡的 Bond 网卡而言,其中一块物理网卡会 ...

  4. Docker命令大全

    1.容器生命周期管理 run  创建一个新的容器并运行一个命令 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: -a stdin ...

  5. Eclipse/jre/jdk/jvm

    理清一下什么是 jre.jdk.jvm这几个容易混淆的东西. 直接在电脑下安装Eclipse,会提醒你缺少JVM. 1.JVM Java Virtual Machine(Java虚拟机)的缩写. 为了 ...

  6. Java静态代码块

    static{ //代码 } 在加载类的时候,会执行静态代码块-->非静态代码块--->构造函数 http://www.cnblogs.com/panjun-Donet/archive/2 ...

  7. c++builder 读写文件类

    c++builder 读写文件类 TStreamReader.TStreamWriter读取一行 http://docwiki.embarcadero.com/CodeExamples/XE8/en/ ...

  8. Spring Boot实践——三种拦截器的创建

    引用:https://blog.csdn.net/hongxingxiaonan/article/details/48090075 Spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可 ...

  9. 表单元素(控件)不可见,你用visibility还是display?(转)

    属性大比拼:visibility和display的介绍 今天在做一个表单时涉及到这方面,当选中相应的选项后设置相应的几个元素(控件可见或不可见),后来还是用了visibility来实现.我们先来看下v ...

  10. MySQL数据库篇之多表查询

    主要内容: 一.多表连接查询 二.复合条件连接查询 三.子查询 1️⃣  多表连接查询 一.准备表 #建表 create table department( id int, name varchar( ...