题目分析:

本题的要求是将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. Codeforces Edu Round 60 A-E

    A. Best Subsegment 显然,选择数列中的最大值当做区间(长度为\(1\)).只要尝试最大值这个区间是否能扩展(左右两边值是否跟它一样就行了) #include <cstdio&g ...

  2. hiveSQL和MySQL区别

    1.hive支持按行分割,按字段分割,如按','分割: lateral view explode(split( , ',')) 2.hive不支持等值连接,即不支持where a.id = b.id的 ...

  3. 关于获取客户端IP问题

    //相关代码 1.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] 2.HttpContext ...

  4. js实现元素范围内拖动

    元素拖拽,网上一堆的实现,其中很多是原生js写的,都不够简洁,甚至运行后看不到效果. 于是乎,安静地想了下,拖动元素貌似就是一个滑动事件的监听处理,具体操作如下: 1.一个外层DIV,或者直接用根节点 ...

  5. 工作三年!全靠大佬的Java笔记,年底跳槽阿里涨了10K

    前言 不论是校招还是社招都避免不了各种⾯试.笔试,如何去准备这些东⻄就显得格外重要,之前8月底阿里的人事部门打电话叫我要不要面试,当时正处于换工作的期间,于是就把简历发给阿里hr,人事审核后经过一些列 ...

  6. pytest接口测试轻松入门

    通过Postman请求结果如下图: 那我们怎么用pytest进行测试呢? 在接口测试,我们要用到requests包,实现代码如下: import pytest import allure import ...

  7. MySQL(二):快速理解MySQL数据库索引

    索引 基本概念:索引是在存储引擎层实现的,而不是在服务器层实现的,所以不同存储引擎具有不同的索引类型和实现. 数据结构 Tree 指的是 Balance Tree,也就是平衡树.平衡树是一颗查找树,并 ...

  8. python2与python3共存后,如何使用

    借用py的一个参数 py -2 与py -3调用不同是的python版本 所以运行的时候只要 py -2 文件名可以用python2来运行脚本 py -3 文件名就是用python3 来运行脚本 参考 ...

  9. Spring Boot GraphQL 实战 01_快速入门

    hello,大家好,我是小黑,又和大家见面啦~ 新开一个专题是关于 GraphQL 的相关内容,主要是通过 Spring Boot 来快速开发 GraphQL 应用,希望对刚接触 GraphQL 的同 ...

  10. 在linux下搭建NFS服务器实现文件共享

    目录 一.关于NFS 二.搭建一台NFS服务器共享特定资源 三.调优 一.关于NFS 1.NFS是Network File System的简写,即网络文件系统.网络文件系统是FreeBSD支持的文件系 ...