题目分析:

本题的要求是将n个数依次插入一个空的二叉搜索树(左大右小,且没有重复数字),最后需要输出其层次遍历以及判断是否是完全二叉搜索树,通过观察我们发现, 如果这个树是用数组建立的,那么最后输出的时候只要按编号从大到小就可以输出层序遍历了,此外,对于是否完全二叉树的判断也可以通过直接判断数组对应的值是否为0即可,需要注意的是由于可能出现极端的情况,这里20个数字可能会占用2^20-1的空间,所以数组需要开大一些

由数组建树代码:

 1 #include<iostream>
2 #include<stdio.h>
3 #include<string.h>
4 using namespace std;
5
6 int k[2500000];
7
8 void createTree(int gen, int x){
9 if(k[gen] == 0){
10 k[gen] = x;
11 return;
12 }else{
13 if(x > k[gen]) createTree(gen*2, x);
14 else createTree(gen*2+1, x);
15 return;
16 }
17 }
18
19 int main(){
20 int n;
21 scanf("%d", &n);
22 memset(k, 0, sizeof(k));
23 for(int i = 1; i <= n; i++){
24 int x;
25 scanf("%d", &x);
26 createTree(1, x);
27 }
28 int flag = 1;
29 int cnt = 0;
30 int num = 1;
31 for(int i = 1; i <= n; i++) num *= 2;
32 for(int i = 1; i <= num; i++){
33 if(k[i] != 0){
34 cnt++;
35 if(cnt > 1) printf(" ");
36 printf("%d", k[i]);
37 }else{
38 if(cnt < n) flag = 0; 
39 }
40 }
41 printf("\n");
42 if(flag == 1) printf("YES\n");
43 else printf("NO\n");
44 return 0;
45 }

由链式建树代码:

 1 #include<iostream>
2 #include<stdio.h>
3 #include<string.h>
4 #include<queue>
5 using namespace std;
6
7 int cnt, n;
8
9 struct Node{
10 int data;
11 Node* left;
12 Node* right;
13 }*root;
14
15 Node* createTree(Node* root, int x){
16 if(root == NULL){
17 root = new Node();
18 root->data = x;
19 root->left = NULL;
20 root->right = NULL;
21 return root;
22 }
23 if(x > root->data) root->left = createTree(root->left, x);
24 else root->right = createTree(root->right, x);
25 return root;
26 }
27
28 void run(Node* root){
29 queue<Node*> q;
30 cnt = 1;
31 q.push(root);
32 int flag = 1;
33 while(!q.empty()){ //有节点就有数字需要输出
34 Node* t = q.front();
35 q.pop();
36 if(cnt > 1) printf(" ");
37 printf("%d", t->data);
38 if(t->left){
39 q.push(t->left);
40 cnt++;
41 }
42 else{
43 if(cnt < n) flag = 0;
44 }
45 if(t->right){
46 q.push(t->right);
47 cnt++;
48 }
49 else{
50 if(cnt < n) flag = 0;
51 }
52 }
53 printf("\n");
54 if(flag == 1) printf("YES\n");
55 else printf("NO\n");
56 }
57
58 int main(){
59 scanf("%d", &n);
60 for(int i = 1; i <= n; i++){
61 int x;
62 scanf("%d", &x);
63 root = createTree(root, x);
64 }
65 run(root);
66 return 0;
67 }

天梯赛练习 L3-010 是否完全二叉搜索树 (30分) 数组建树模拟的更多相关文章

  1. PTA 7-1 是否完全二叉搜索树 (30分)

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

  2. 团体程序设计天梯赛-练习集L2-004. 这是二叉搜索树吗

    L2-004. 这是二叉搜索树吗? 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一棵二叉搜索树可被递归地定义为具有下列性质的 ...

  3. PAT 天梯赛 是否完全二叉搜索树   (30分)(二叉搜索树 数组)

    将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. 输入格式: 输入第一行给出一个不超过20的正整数 ...

  4. PAT 天梯赛练习集 L2-004. 这是二叉搜索树吗?

    题目链接: https://www.patest.cn/contests/gplt/L2-004 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点 ...

  5. L3-010 是否完全二叉搜索树 (30分)

    题解 判断一棵树是否是完全二叉树: 取队列的头,将头的左右孩子入队,循环每次判断是否为空,如果为空节点,此时退出循环. 然后检查队列中的元素是否全部为空,如果是则说明是完全二叉树,否则不是. 代码 # ...

  6. PTA 04-树4 是否同一棵二叉搜索树 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/712 5-4 是否同一棵二叉搜索树   (25分) 给定一个插入序列就可以唯一确定一棵二 ...

  7. 7-4 是否同一棵二叉搜索树 (25分) JAVA

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到. 例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结 ...

  8. PTA 是否二叉搜索树 (25分)

    PTA 是否二叉搜索树 (25分) 本题要求实现函数,判断给定二叉树是否二叉搜索树. 函数接口定义: bool IsBST ( BinTree T ); 其中BinTree结构定义如下: typede ...

  9. PAT 天梯赛 是否同一棵二叉搜索树   (25分)(二叉搜索树 指针)

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...

随机推荐

  1. XJOI contest 1592

    首先 热烈庆祝"CSP-S 2020全国开放赛前冲刺模拟训练题2"圆满结束!!! 感谢大毒瘤颗粒囊的题目.题目还是很不错的,部分分设置的不合理,各种神仙随便 AK ,蒟蒻只能爆零. ...

  2. 学生证申请Idea

    1.地址:https://www.jetbrains.com/shop/eform/students2.英语不好的一键翻译,说明:三五天下来3.上图:

  3. JavaSE04-Switch&循环语句

    1.Switch 格式: 1 switch (表达式) { 2 case 1: 3 语句体1; 4 break; 5 case 2: 6 语句体2; 7 break; 8 ... 9 default: ...

  4. kafka监控之topic的lag情况监控

    需求描述:lag(滞后)是kafka消费队列性能监控的重要指标,lag的值越大,表示kafka的堆积越严重.本篇文章将使用python脚本+influxdb+grafana的方式对kafka的offs ...

  5. TLS 协议

    一.背景 参与了一个Sofa-RPC开源项目,认领了TLS的任务,记录下这次宝贵的经历,并感谢章哥的信任以及在整个过程中对我的帮助. 负责的部分不难,主要是使用h2(HTTP 2加密)协议,完成RPC ...

  6. 我用go-zero开发了第一个线上项目

    作者:结冰 前言 ​ 说在最前面,我是一个外表谦让,内心狂热,外表斯文,内心贪玩的一个普通人.我的职业是程序员,是一个golang语言爱好者,一半是因为golang好用,一半是因为其他语言学不好.我是 ...

  7. Python读写EXCEL文件常用方法大全

    前言 python读写excel的方式有很多,不同的模块在读写的讲法上稍有区别,这里我主要介绍几个常用的方式. 用xlrd和xlwt进行excel读写: 用openpyxl进行excel读写: 用pa ...

  8. Javascript 根据文件名判断是否未图片

    var isImage = (/\.(gif|jpe?g|tiff?|png|webp|bmp)$/i).test(filename)

  9. php代码审计整理

    目录 变量覆盖 1x01.extract 变量覆盖 定义和用法 语法 漏洞产生:使用了默认设置 攻击方法:制造变量名冲突,对于需要相等的值可以同时置空 修复:设定一个冲突时的处理规则 例题: 1x02 ...

  10. html2canvas实现浏览器截图的原理(包含源码分析的通用方法)

    DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师. 官方网站:devui.design Ng组件库:ng-devui(欢 ...