pta 是否完全二叉搜索树 (树的遍历)
来源:互联网 发布:单片机 如何打印二维码 编辑:程序博客网 时间:2024/04/27 21:39
将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。
输入格式:
输入第一行给出一个不超过20的正整数N
;第二行给出N
个互不相同的正整数,其间以空格分隔。
输出格式:
将输入的N
个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出YES
,如果该树是完全二叉树;否则输出NO
。
输入样例1:
938 45 42 24 58 30 67 12 51
输出样例1:
38 45 24 58 42 30 12 67 51YES
输入样例2:
838 24 12 45 58 67 42 51
输出样例2:
38 45 24 58 42 12 67 51NO
解题思路:
建立好二叉搜索树后,我们去层序遍历这颗树,遍历的时候我们可以完成两项操作,第一项操作就是题目要求的按层序遍历输出这颗树每个节点的值,第二项操作就是去验证当前节点是否符合完全二叉树的要求。一个节点符合完全二叉树的要求有三种情况:
1.左子树和右子树都非空
2.当之后的节点都不存在儿子的时候,当前节点只存在左儿子
3.当之后的节点都存在儿子的时候,当前节点没有儿子。
最后两种情况需要特判一下,不然就掉分。
代码:
#include <bits/stdc++.h>using namespace std;const double eps=1e-4;struct p{ int x; p*l; p*r;};p* que[44];int n;void build(int x, p*&root){ if(root==NULL) { root=(p*)malloc(sizeof(p)); root->x=x; root->l=root->r=NULL; return; } if(root->x>x) { build(x, root->r); } else build(x, root->l); return;}int top;void cx(p*q){ int head=0, tail=0; que[tail++]=q; p*root; while(head<tail) { root=que[head]; printf(head==n-1?"%d\n":"%d ", root->x); if(tail>=n)if(root->l==NULL && root->r==NULL)top++;//后续节点都没有儿子的时候判断当前节点两个儿子都不存在的情况 if(root->l!=NULL && root->r!=NULL)top++; if(tail==n-1 &&(root->l!=NULL && root->r==NULL))top++; //后续节点都没有儿子且前面的节点都存在两个儿子的时候判断当前节点的只存在一个左儿子的情况 if(root->l) { que[tail++]=root->l; } if(root->r) { que[tail++]=root->r; } head++; } return;}int main(){ cin>>n; int i, j, x; p*root=(p*)malloc(sizeof(p)); scanf("%d", &x); root->x=x; root->l=root->r=NULL; for(i=1; i<n; i++) { scanf("%d", &x); build(x, root); } top=0; cx(root); if(top>=n)printf("YES\n");// else if(top==n-1)printf("YES\n"); else printf("NO\n"); return 0;}
0 0
- pta 是否完全二叉搜索树 (树的遍历)
- PTA L3-010 是否完全二叉搜索树 (建树 + 遍历 + 判别)
- PTA 7-2 是否完全二叉搜索树(30 分)
- PTA 一 是否完全二叉树
- L3-010. 是否完全二叉搜索树 (对完全二叉树/层次遍历的理解)
- PTA-是否同一棵二叉搜索树
- C4top-是否完全二叉搜索树 (层次遍历+完全判断)
- 是否完全二叉搜索树
- PTA 4-3 二叉树的遍历
- pat L3-010是否完全二叉搜索树(静态建树 层次遍历)@
- 二叉搜索树的习题 pta
- PTA数据结构 5-4 是否同一棵二叉搜索树
- PTA 5-1 是否同一棵二叉搜索树(数据结构)
- PTA习题 5-4 是否同一棵二叉搜索树(二叉搜索树的构建以及相同树的判断)
- PTA 7-1 是否同一棵二叉搜索树(25 分) 建树比较
- L3-010. 是否完全二叉搜索树
- PATL3-010. 是否完全二叉搜索树
- 14 是否完全二叉搜索树
- 谷哥的小弟学后台(34)——MyBatis概述
- php flock 独占使用
- A. Pupils Redistribution
- Java之Collections工具类方法使用以及源码分析(四)
- A Tutorial on Clustering Algorithms
- pta 是否完全二叉搜索树 (树的遍历)
- 《Java高并发程序设计》总结--4. 锁的优化及注意事项
- 如何讲故事
- UVA 821 Page Hopping (Floyd)
- 操作系统之处理机调度
- react-native 使用AsyncStorage实现长登陆
- 蓝桥杯ADV-88——算法提高 输出正反三角形
- 解释器模式
- 数论基础(gcd + 拓展欧几里得)