天梯赛练习 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}插入初始为空的二叉搜索树,都得到一样的结果 ...
随机推荐
- MarkDown的练习_Java开发学习路径
MarkDown的练习 语言学习 C/C++语言 Java语言 基础四大件 数据结构与算法 操作系统 计算机网络 设计模式 数据库/SQL 私人令牌:42bb654f53941d5692e98b35f ...
- 基于Python3.7 Robot Framework自动化框架搭建
一.Robot Framework 和 Selenium 的区别(面试常问) 主流自动化测试框架有Robot Framework 和 Selenium,请根据实际场景选用不同的框架,以下总结各自优缺点 ...
- SQL:我为什么慢你心里没数吗?
SQL 语句执行慢的原因是面试中经常会被问到的,对于服务端开发来说也是必须要关注的问题. 在生产环境中,SQL 执行慢是很严重的事件.那么如何定位慢 SQL.慢的原因及如何防患于未然.接下来带着这些问 ...
- Python处理邮件内容和提取邮件里的url地址
最近在搞一个邮箱验证账号注册和登录的模块.总结一下.就当记载.文章中涉及到域名和邮箱等都经过处理. 需求是这样子的,注册某个网站的账号,然后注册需要邮件内容激活,登录的时候如果不是常用设备的话也需要认 ...
- WEBSERVICE 分析器错误信息: 未能创建类型
问题描述 分析器错误 说明: 在分析向此请求提供服务所需资源时出错.请检查下列特定分析错误详细信息并适当地修改源文件. 分析器错误信息: 未能创建类型"Service1". 源错误 ...
- 老板居然让我在Java项目中“造假”
1. 前言 老板说,明天甲方要来看产品,你得造点数据,而且数据必须是"真"的,演示效果要好看一些,这样他才会买我们的产品,我好明年给你换个嫂子.一般开发接到这种过分要求都不会很乐意 ...
- JAVA中IO流详解
IO流:数据传输是需要通道的,而IO流就是数据传输的通道. IO流可以形象的比喻为运送货物的传输带. IO流的分类: ①根据操作的数据类型的不同可以分为 :字节流与字符流. ②根据数据的流向分为:输入 ...
- [LeetCode]223. Rectangle Area矩形面积
/* 像是一道数据分析题 思路就是两个矩形面积之和减去叠加面积之和 */ public int computeArea(int A, int B, int C, int D, int E, int F ...
- ESP8266系列图片外观 Wi-Fi模块一共有01~14十多款模块
- Java学习日报7.17
控制台运行