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

输入格式:

输入第一行给出一个不超过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<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std; //变量定义
int tree[<<];//定义一个整形数组,不初始化默认等于零
int num,n; //构造二叉搜索树
void build(int pos)
{
if(tree[pos]==)
tree[pos]=num;
else
{
if(num>tree[pos])//这道题定义为左子树大
build(pos<<);//两倍的位置
else
build(pos<<|);//两倍+1的位置
}
} int main()
{
cin>>n;
//建树
for(int i=;i<=n;i++)
{
cin>>num;
build();
}
//边层序输出边判断
bool flag=true;
for(int i=,con=;con<=n;i++)
{
if(tree[i]==)
flag=false;//因为在结束之前数组应该是被填满的
else
{
cout<<tree[i];
if(con++!=n)
cout<<" ";
}
}
cout<<endl;
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return ;
}

最新文章

  1. 关于asp.net利用mono部署到Linux上的一些说明
  2. asp.net链接数据库问题,设置收藏本站,设置主页
  3. JQuery的一些简单操作02
  4. 【BZOJ-4435】Juice Junctions 最小割树(分治+最小割)+Hash
  5. C++学习34 模板类
  6. [JFinal 1] JFinal和SSH中使用拦截器的对比
  7. Oracle中遍历Ref Cursor示例
  8. 5.CentOS6.6安装git
  9. linux 下 安装nexus
  10. 使用logstash收集日志的可靠性验证
  11. 多个haproxy 之间跳转
  12. table明明设置了固定值
  13. HTML——博客页面布局
  14. 自己主动机串标:Directed Acyclic Word Graph
  15. 洛谷 P1219 八皇后【经典DFS,温习搜索】
  16. Python学习笔记 - ifelifelse-forin-while
  17. U3D外包团队:五款IDE推荐!
  18. 部署flask
  19. lombok-@Accessors注解
  20. java.io.FileNotFoundException异常,一是“拒绝访问”,二是“系统找不到指定路径”

热门文章

  1. ASCII 、UTF-8、Unicode都是个啥啊,为啥会乱码啊?
  2. python argparse模块--转载
  3. hdu 2586 How far away ? 带权lca
  4. shell 布尔运算
  5. Oracle数据库常见版本
  6. Java JDK5新特性-可变参数
  7. pv、uv、ip、tps、qps 等术语简单释义
  8. 增加centos7.3上安装php7的php-soap扩展
  9. android--------Android Studio常见问题以及解决方式
  10. php--------使用js生成二维码