完全二叉树的层序遍历(马老师的比赛心得)
L2-3 完全二叉树的层序遍历 (25分)
## 比赛的时候差一点就完成了,所以写个博客了却一下自己的遗憾。
一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是完全二叉树。
给定一棵完全二叉树的后序遍历,请你给出这棵树的层序遍历结果。
输入格式:
输入在第一行中给出正整数 N(≤30),即树中结点个数。第二行给出后序遍历序列,为 N 个不超过 100 的正整数。同一行中所有数字都以空格分隔。
输出格式:
在一行中输出该树的层序遍历序列。所有数字都以 1 个空格分隔,行首尾不得有多余空格。
输入样例:
8
91 71 2 34 10 15 55 18
输出样例:
18 34 55 71 2 10 15 91
作者 陈越
单位 浙江大学
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB
解题思路
递归创建完全二叉树
因为是后序遍历所以我们应该从遍历结果的后面开始插入
91 71 2 34 10 15 55 18
首次创建一个完全二叉树的数组(根据完全二叉树的定义)
1 2 3 4 5 6 7 8
0 0 0 0 0 0 0 0
1.插入根节点
2.先插入左孩子
3.计算当前节点的孩子节点存在调用递归插入该节点的左孩子
4.当前节点无孩子节点,插入右孩子
5.当前节点无孩子节点,该次递归结束,返回调用处,插入节点的右孩子
6.继续同样的递归步骤
代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>int *b,*a,n,begin;
int xv;
void put_tree(int xv){//后序递归插入int xc;if(begin<0)//插入结束return ;if(xv*2>n){//当前节点无孩子节点可以插入begin++;return ;}if(xv*2+1<=n){b[xv*2+1]=a[begin];begin--;put_tree(xv*2+1);//递归插入左孩子节点begin--;}b[xv*2]=a[begin];begin--;put_tree(xv*2);//递归插入右孩子节点
}int main(){int i,xc;scanf("%d",&n);a=(int *)malloc(sizeof(int)*n);for(i=0;i<n;i++)scanf("%d",&a[i]);//后序输入b=(int *)malloc(sizeof(int)*(n+1));b[1]=a[n-1];//放入根节点begin=n-2;put_tree(1);printf("%d",b[1]);for(i=2;i<=n;i++)//输出if(b[i]!=0)printf(" %d",b[i]);elsebreak;printf("\n");
}
完全二叉树的层序遍历(马老师的比赛心得)相关推荐
- 完全二叉树的层序遍历游戏
"司马龙先生,又出现了一个新游戏的入口",司马龙先生旁边的头发乱糟糟的助手马代钧说到. "可恶.还是迟了一步吗?又给我们布下了一个谜题",司马龙如是说. &qu ...
- 【2020团体程序设计天梯赛】L2-3 完全二叉树的层序遍历(后序遍历转层次遍历)
problem 7-11 完全二叉树的层序遍历 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的 ...
- 【L2-035 完全二叉树的层序遍历】天梯赛L2详解
天梯赛L2-035 完全二叉树的层序遍历 题目详情: 思路: 利用完全二叉树的特点,直接进行递归即可. 完全二叉树的特点:假设根结点是a,那么他的左节点一定是2a,右节点一定是2a+1 详细代码: # ...
- PTA L2-035 完全二叉树的层序遍历(树的遍历)
L2-035 完全二叉树的层序遍历 (25分) 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的 ...
- L2-035 完全二叉树的层序遍历 (25 分)-PAT 团体程序设计天梯赛 GPLT
一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是完全二叉树 ...
- 团体程序设计天梯赛 L2-035 完全二叉树的层序遍历
题目链接 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是 ...
- 二叉树的进阶操作---(求二叉树中所有结点个数,求叶子结点个数,求第k层结点个数;在二叉树中查找某一结点;层序遍历;判断是否为完全二叉树)
typedef struct TreeNode {struct TreeNode *left;struct TreeNode *right;char val; }TreeNode;typedef st ...
- 数据结构:二叉树层序遍历和判断是否为完全二叉树
层序遍历 从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第二层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的节点的过程. while(队列!=NULL) ...
- C++实现二叉树相关问题(先序遍历,中序遍历,后序遍历,层序遍历,搜索二叉树、平衡二叉树、满二叉树、完全二叉树的判断,最低公共祖先,二叉树的序列化和反序列化)
目录 题目一 二叉树递归和非递归遍历 题目二 如何完成二叉树的宽度(也叫层序)遍历(常见题目:求一棵二叉树的宽度) 题目四 如何判断一棵二叉树是搜索二叉树(BST)? 题目四 如何判断一棵二叉树是平衡 ...
最新文章
- Java HotSpot VM 命令行参数【官方版】
- Linq to XML 基本类
- 羊皮卷的故事-第十章-羊皮卷之三
- 机器学习入门数学书籍推荐(部分资源有下载链接)
- 【安全漏洞】一次前台任意文件下载漏洞挖掘
- java runnable 异常_Java实现多线程异常捕获Runnable的案例
- plc 上位机编译算法_什么是PLC与DDC PLC与DDC的区别
- python基础代码技巧_写Python必须知道的这几个代码技巧!你会吗?
- wdm 驱动 支持 win7_可以在Win7上装intel 9代CPU吗?
- [Yii Framework] yii中如何不加载layout
- eclipse jre 参数
- Ubuntu下VSCode使用等宽字体设置
- TwinCAT 3 使用XML-server
- C++实现鼠标左键点击关闭控制台
- mini QQ(项目一)
- 【21考研】计算机/软件等专业调剂信息集合!【完结版】
- python线性加权回归_第二十一章 regression算法——线性回归局部加权回归算法(上)...
- Kali Linux基础
- 怀孕期间准妈妈多吃西红柿
- 深度学习相关课程,MIT、李沐、吴恩达、