天梯赛练习 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}插入初始为空的二叉搜索树,都得到一样的结果 ...
随机推荐
- 【题解】「CF363A」Soroban
哎呀呀,咕值要掉光了,赶快水篇题解( solution 这题就是个纯模拟,首先我们根据输出样例看一下输出算盘的规则. 看数最大的 720 ,我们发现,输出的算盘张这样(之所以我不用代码框而用 \(\K ...
- 【复习笔记】重习 AC 自动机
发现已经忘了许多....于是复习一下 基础要点概况 AC 自动机基于 Trie 树 的结构,即构建 AC 自动机前需要先建 Trie. 一个状态中除了转移 \(\delta\) 之外还有失配指针 \( ...
- P5785 [SDOI2012]任务安排
本题解用于本蒟蒻加深算法印象,也欢迎大家阅读 本篇题解将分为四块,一步一步地讲解本题, Part 1: O(n^3) \(n^3\) 算法应该非常的显然,我们设 \(f_{i,j}\) 为到 \(i\ ...
- 数组问题:a[i][j] 和 a[j][i] 有什么区别?
本文以一个简单的程序开头--数组赋值: int LEN = 10000; int[][] arr = new int[LEN][LEN]; for (int i = 0; i < LEN; i+ ...
- idea导入配置SSM项目,并进行打包
idea确实是一个功能强大的开发工具,但是配置项目太复杂,每次都要花费很长的时间在配置上. 关于SSM项目导入,配置,打包,看这篇就够了,百试不爽.
- Java 8 Lambda表达式-接口实现
Java 8 Lambda表达式在只有一个方法的接口实现代码编写中,可以起到简化作用: (argument list) -> body 具体看Runnable接口的例子 public class ...
- 关于Java中的String类知识点小总结
Java中的String类知识点 前言 在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. 如何创建字符串 最简单的方式 String str = "he ...
- 最新 obs-studio vs2019 开发环境搭建 代码编译
距离上一篇文章很久了,重新开始记录 OBS 开发相关情况,第一步就是环境搭建,第二步是构建 OBS-Studio VS 2019 开发环境搭建 下载软件和资源 软件安装没有特别说明的,下载安装即可. ...
- 深度实战玩转算法, Java语言7个经典应用诠释算法精髓
深度实战玩转算法,以Java语言主讲,通过7款经典好玩游戏,真正将算法用于实际开发,由算法大牛ACM亚洲区奖牌获得者liuyubobobo主讲,看得见的算法,带领你进入一个不一样的算法世界,本套课程共 ...
- Android面试系列一
什么是ANR,如何避免它 ANR是应用程序无响应(Application Not Responding)的的英文缩写: 当Android 手机在一段时间响应不够灵敏,系统会向用户展示一个对话框 ...