天梯赛练习 L3-010 是否完全二叉搜索树 (30分) 数组建树模拟
题目分析:
本题的要求是将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分) 数组建树模拟的更多相关文章
- PTA 7-1 是否完全二叉搜索树 (30分)
PTA 7-1 是否完全二叉搜索树 (30分) 将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. ...
- 团体程序设计天梯赛-练习集L2-004. 这是二叉搜索树吗
L2-004. 这是二叉搜索树吗? 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一棵二叉搜索树可被递归地定义为具有下列性质的 ...
- PAT 天梯赛 是否完全二叉搜索树 (30分)(二叉搜索树 数组)
将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. 输入格式: 输入第一行给出一个不超过20的正整数 ...
- PAT 天梯赛练习集 L2-004. 这是二叉搜索树吗?
题目链接: https://www.patest.cn/contests/gplt/L2-004 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点 ...
- L3-010 是否完全二叉搜索树 (30分)
题解 判断一棵树是否是完全二叉树: 取队列的头,将头的左右孩子入队,循环每次判断是否为空,如果为空节点,此时退出循环. 然后检查队列中的元素是否全部为空,如果是则说明是完全二叉树,否则不是. 代码 # ...
- PTA 04-树4 是否同一棵二叉搜索树 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/712 5-4 是否同一棵二叉搜索树 (25分) 给定一个插入序列就可以唯一确定一棵二 ...
- 7-4 是否同一棵二叉搜索树 (25分) JAVA
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到. 例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结 ...
- PTA 是否二叉搜索树 (25分)
PTA 是否二叉搜索树 (25分) 本题要求实现函数,判断给定二叉树是否二叉搜索树. 函数接口定义: bool IsBST ( BinTree T ); 其中BinTree结构定义如下: typede ...
- PAT 天梯赛 是否同一棵二叉搜索树 (25分)(二叉搜索树 指针)
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...
随机推荐
- 如何建一个SAM
部分改编自OI WIKI 先从一个简单的问题入手: 给定一个串,构造一个图,使其能够表示它的所有子串. 显然一个子串就是一个后缀的前缀.所以一个很显然的方式就是把所有后缀扔进trie里. 比如当前串是 ...
- Angular:使用前端proxy代理解决跨域问题
①在项目文件的根目录下新建文件proxy.config.json { "/": { "target": "http://127.0.0.1:3000& ...
- 带宽、延时、吞吐率、PPS 这些都是啥?
Linux 网络协议栈是根据 TCP/IP 模型来实现的,TCP/IP 模型由应用层.传输层.网络层和网络接口层,共四层组成,每一层都有各自的职责. 应用程序要发送数据包时,通常是通过 socket ...
- 网站配置Gittalk教程和解决gittalk的Error: Not Found.问题
想把网站增加gittalk的评论功能,按照其他教程配置后,出现了 Error: Not Found. 的错误.截图如下: 网上找了很多解决方案,现在贴出来完整的配置Gittalk的教程. 01.新建评 ...
- 从面试角度分析LinkedList源码
注:本系列文章中用到的jdk版本均为java8 LinkedList类图如下: LinkedList底层是由双向链表实现的.链表好比火车,每节车厢包含了车厢和连接下一节车厢的连接点.而双向链表的每个节 ...
- css 13-CSS3属性:Flex布局图文详解
13-CSS3属性:Flex布局图文详解 #前言 CSS3中的 flex 属性,在布局方面做了非常大的改进,使得我们对多个元素之间的布局排列变得十分灵活,适应性非常强.其强大的伸缩性和自适应性,在网页 ...
- 最速下降法--MATLAB程序
function x = fxsteep(f,e,a,b)x1 = a;x2 = b;Q = fxhesson(f,x1,x2);x0 = [x1,x2]';temp = [x0];fx1 = dif ...
- 初接触matplotlib
1,绘制简单的折线图. 1 import matplotlib.pyplot as plt 2 3 square = [1,4,9,16,25] 4 5 plt.plot(square) 6 plt. ...
- Asp.net Core3.1+Vue 使用SignalR推送数据
本文就简单使用 往前端页面推送消息 SignalR 是什么 SignalR是一个.NET Core/.NET Framework的开源实时框架. SignalR的可使用Web Socket, Serv ...
- 1.Redis基础命令
重要概念 redis是单线程模型,所有命令都会进入一个队列,然后依次被执行. 全局命令 >>>select dbindex #切换数据库,默认有16个库,库标识符为0-15 > ...