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");
}

完全二叉树的层序遍历(马老师的比赛心得)相关推荐

  1. 完全二叉树的层序遍历游戏

    "司马龙先生,又出现了一个新游戏的入口",司马龙先生旁边的头发乱糟糟的助手马代钧说到. "可恶.还是迟了一步吗?又给我们布下了一个谜题",司马龙如是说. &qu ...

  2. 【2020团体程序设计天梯赛】L2-3 完全二叉树的层序遍历(后序遍历转层次遍历)

    problem 7-11 完全二叉树的层序遍历 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的 ...

  3. 【L2-035 完全二叉树的层序遍历】天梯赛L2详解

    天梯赛L2-035 完全二叉树的层序遍历 题目详情: 思路: 利用完全二叉树的特点,直接进行递归即可. 完全二叉树的特点:假设根结点是a,那么他的左节点一定是2a,右节点一定是2a+1 详细代码: # ...

  4. PTA L2-035 完全二叉树的层序遍历(树的遍历)

    L2-035 完全二叉树的层序遍历 (25分) 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的 ...

  5. L2-035 完全二叉树的层序遍历 (25 分)-PAT 团体程序设计天梯赛 GPLT

    一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是完全二叉树 ...

  6. 团体程序设计天梯赛 L2-035 完全二叉树的层序遍历

    题目链接 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是 ...

  7. 二叉树的进阶操作---(求二叉树中所有结点个数,求叶子结点个数,求第k层结点个数;在二叉树中查找某一结点;层序遍历;判断是否为完全二叉树)

    typedef struct TreeNode {struct TreeNode *left;struct TreeNode *right;char val; }TreeNode;typedef st ...

  8. 数据结构:二叉树层序遍历和判断是否为完全二叉树

    层序遍历 从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第二层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的节点的过程. while(队列!=NULL) ...

  9. C++实现二叉树相关问题(先序遍历,中序遍历,后序遍历,层序遍历,搜索二叉树、平衡二叉树、满二叉树、完全二叉树的判断,最低公共祖先,二叉树的序列化和反序列化)

    目录 题目一 二叉树递归和非递归遍历 题目二 如何完成二叉树的宽度(也叫层序)遍历(常见题目:求一棵二叉树的宽度) 题目四 如何判断一棵二叉树是搜索二叉树(BST)? 题目四 如何判断一棵二叉树是平衡 ...

最新文章

  1. Java HotSpot VM 命令行参数【官方版】
  2. Linq to XML 基本类
  3. 羊皮卷的故事-第十章-羊皮卷之三
  4. 机器学习入门数学书籍推荐(部分资源有下载链接)
  5. 【安全漏洞】一次前台任意文件下载漏洞挖掘
  6. java runnable 异常_Java实现多线程异常捕获Runnable的案例
  7. plc 上位机编译算法_什么是PLC与DDC PLC与DDC的区别
  8. python基础代码技巧_写Python必须知道的这几个代码技巧!你会吗?
  9. wdm 驱动 支持 win7_可以在Win7上装intel 9代CPU吗?
  10. [Yii Framework] yii中如何不加载layout
  11. eclipse jre 参数
  12. Ubuntu下VSCode使用等宽字体设置
  13. TwinCAT 3 使用XML-server
  14. C++实现鼠标左键点击关闭控制台
  15. mini QQ(项目一)
  16. 【21考研】计算机/软件等专业调剂信息集合!【完结版】
  17. python线性加权回归_第二十一章 regression算法——线性回归局部加权回归算法(上)...
  18. Kali Linux基础
  19. 怀孕期间准妈妈多吃西红柿
  20. 深度学习相关课程,MIT、李沐、吴恩达、

热门文章

  1. 教育行业开发手机APP需要哪些功能
  2. C语言:白球红球黑球
  3. Python基础--正则表达式语法及其操作
  4. 华为重启交换机命令_华为交换机配置命令后需要重启吗
  5. 计算机报0x0000000a,win7蓝屏代码0x0000000a是什么意思 怎么解决
  6. 安装msi程序报错2503错误解决方案(Win10)
  7. 影响论坛类网站运营五大要素
  8. idea 如何 进行无限续期
  9. 转:如何提高网页的效率(下篇)——Use YSlow to know why your web Slow
  10. PySide6(Qt for Python) 启航篇