PTA 7-1 是否完全二叉搜索树 (30分)
PTA 7-1 是否完全二叉搜索树 (30分)
将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。
输入格式:
输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。
输出格式:
将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出YES,如果该树是完全二叉树;否则输出NO。
输入样例1:
9
38 45 42 24 58 30 67 12 51
输出样例1:
38 45 24 58 42 30 12 67 51
YES
输入样例2:
8
38 24 12 45 58 67 42 51
输出样例2:
38 45 24 58 42 12 67 51
NO
【程序思路】
输入数据然后根据二叉搜索树的插入操作建树。
判断是否完全二叉树的要点: 我们按照层次顺序遍历这颗树的过程中,对于任意一节点x
- 如果x 有右子树,但是却没有左子树,这肯定不是完全二叉树
- (如果x 有左子树,但是却没有右子树)|| ( 如果 x 左右子树都没有)【归纳来说就是没有右子树】,那么剩余的所有节点一定要为叶子节点
【程序实现】
#include<bits/stdc++.h>
using namespace std;
typedef struct tree{
int data;
struct tree *left;
struct tree *right;
}*Tree;
Tree Insert(Tree root, int x) {
if (!root) {
root = new struct tree;
root->data = x;
root->left = root->right = NULL;
}
else {
if (x > root->data)
root->left = Insert(root->left, x);
else if (x < root->data)
root->right = Insert(root->right, x);
}
return root;
}
bool VisitJdg(Tree root) {
queue<Tree> q;
int flag = 0;
bool jdg = true;
if (root) {
q.push(root);
while(!q.empty()) {
Tree t = q.front();
q.pop();
cout<<t->data;
if (t->left)
q.push(t->left);
if (t->right)
q.push(t->right);
if (!q.empty())
cout<<' ';
if (!flag) {
if (!t->left && t->right)
jdg = false;
else if (!t->right)
flag = 1;
}
else {
if (t->left || t->right)
jdg = false;
}
}
cout<<endl;
}
return jdg;
}
int main(){
Tree root = NULL;
int n, x;
cin>>n;
for (int i = 0; i < n; i++) {
cin>>x;
root = Insert(root, x);
}
if(VisitJdg(root))
cout<<"YES\n";
else
cout<<"NO\n";
return 0;
}
PTA 7-1 是否完全二叉搜索树 (30分)的更多相关文章
- PTA 04-树4 是否同一棵二叉搜索树 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/712 5-4 是否同一棵二叉搜索树 (25分) 给定一个插入序列就可以唯一确定一棵二 ...
- PAT 天梯赛 是否完全二叉搜索树 (30分)(二叉搜索树 数组)
将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. 输入格式: 输入第一行给出一个不超过20的正整数 ...
- 天梯赛练习 L3-010 是否完全二叉搜索树 (30分) 数组建树模拟
题目分析: 本题的要求是将n个数依次插入一个空的二叉搜索树(左大右小,且没有重复数字),最后需要输出其层次遍历以及判断是否是完全二叉搜索树,通过观察我们发现, 如果这个树是用数组建立的,那么最后输出的 ...
- L3-010 是否完全二叉搜索树 (30分)
题解 判断一棵树是否是完全二叉树: 取队列的头,将头的左右孩子入队,循环每次判断是否为空,如果为空节点,此时退出循环. 然后检查队列中的元素是否全部为空,如果是则说明是完全二叉树,否则不是. 代码 # ...
- PTA 是否二叉搜索树 (25分)
PTA 是否二叉搜索树 (25分) 本题要求实现函数,判断给定二叉树是否二叉搜索树. 函数接口定义: bool IsBST ( BinTree T ); 其中BinTree结构定义如下: typede ...
- 7-4 是否同一棵二叉搜索树 (25分) JAVA
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到. 例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结 ...
- pta l2-4(这是二叉搜索树吗?)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805070971912192 题意:给定n以及n个整数,问该序列 ...
- PAT 天梯赛 是否同一棵二叉搜索树 (25分)(二叉搜索树 指针)
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...
- [刷题] PTA 04-树4 是否同一棵二叉搜索树
程序: 1 #include <stdio.h> 2 #include <stdlib.h> 3 typedef struct TreeNode *Tree; 4 struct ...
随机推荐
- sonar入门
一.Sonar是什么? 根据我的了解,可以说Sonar包含三个部分: SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码味道.它可以与您现有的工作流程集成,以实现跨项目分支和提 ...
- After Effects 图层属性及属性组结构详解
根据结构类型的属性分类 在 After Effects 的脚本开发中,图层的属性可被区分为三种类型:PROPERTY.INDEXED_GROUP 和 NAMED_GROUP .通过使用app.proj ...
- asp.net core使用identity+jwt保护你的webapi(三)——refresh token
前言 上一篇已经介绍了identity的注册,登录,获取jwt token,本篇来完成refresh token. 开始 开始之前先说明一下为什么需要refresh token. 虽然jwt toke ...
- 洛谷2543AHOI2005]航线规划 (树剖+线段树+割边思路)
这个题的思路还是比较巧妙的. 首先,我们发现操作只有删除和询问两种,而删除并不好维护连通性和割边之类的信息. 所以我们不妨像WC2006水管局长那样,将询问离线,然后把操作转化成加边和询问. 然后,我 ...
- Mydoom样本分析报告
文件检测 信息 值 文件名 1.virus 文件类型 WIN 32 EXE 文件大小 41664 bytes MD5 3d466b0f8ba9f3fe03e137a34d79f682 SHA-256 ...
- kafka初认识(一)
首先贴出官网地址:https://kafka.apache.org/ 一. 简介 Kafka 是 linkedin 使用 Scala 编写具有高水平扩展和高吞吐量的分布式消息系统.Kafka 对消息保 ...
- Windows Terminal 和 WSL
Windows Terminal ,配置启动目录为 WSL : \\wsl$\Ubuntu\home
- Linux中使用dd制作文件的.img
dd if=/dev/zero of=new_img.img bs=1M count=20 //生成20M的文件,bs块的大小,count块的数量 mkfs.ext3 new_img.img / ...
- 初学Python-day12 装饰器函数
装饰器 1.概念 本质就是一个Python函数,其他函数在本身不变的情况下去增加额外的功能,装饰器的返回值是一个函数. 常用的场景:插入日志,事务处理,缓存,权限校验等. 2.普通函数回顾 1 def ...
- JAVA复习总体大纲
1 java基础. [1].变量--- 数据类型 变量名=值; 数据类型: 1.基本数据类型. byte[1字节] short[2字节] int[4字节] long[8字节] float[4字节] d ...