题目描述:

一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 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

分析:

在In中保存输入的后序遍历序列,在dfs保存从根节点开始按层序遍历序列的序号。深度优先搜索,index标表示当前节点,大于n则返回。按照完全二叉树的遍历原理进行后序遍历,先进入左右子树(编号为index*2 和 index*2+1,即index右移1位,和index右移1位+1),cnt为后序遍历的位置标记,并将当前所在的后序遍历的元素,填入dfs[index]内。

代码:

#include <bits/stdc++.h>
using namespace std;
int n, cnt, In[32], dfs[32];
void Func(int index) {
if (index > n) return;
Func(index << 1);
Func(index << 1 | 1);
dfs[index] = In[cnt++];
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> In[i];
Func(1);
cout << dfs[1];
for (int i = 2; i <= n; i++) cout << ' ' << dfs[i];
return 0;
}

引申:

1.根据先序遍历,输出层次遍历

#include <bits/stdc++.h>
using namespace std;
int n, cnt, In[32], dfs[32];
void Func(int index) {
if (index > n) return;
dfs[index] = In[cnt++];
Func(index << 1);
Func(index << 1 | 1);
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> In[i];
Func(1);
cout << dfs[1];
for (int i = 2; i <= n; i++) cout << ' ' << dfs[i];
return 0;
}

2.根据中序遍历,输出层次遍历

#include <bits/stdc++.h>
using namespace std;
int n, cnt, In[32], dfs[32];
void Func(int index) {
if (index > n) return;
Func(index << 1);
dfs[index] = In[cnt++];
Func(index << 1 | 1);
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> In[i];
Func(1);
cout << dfs[1];
for (int i = 2; i <= n; i++) cout << ' ' << dfs[i];
return 0;
}

3.根据后序遍历,输出层次遍历

#include <bits/stdc++.h>
using namespace std;
int n, cnt, In[32], dfs[32];
void Func(int index) {
if (index > n) return;
Func(index << 1);
Func(index << 1 | 1);
dfs[index] = In[cnt++];
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) cin >> In[i];
Func(1);
cout << dfs[1];
for (int i = 2; i <= n; i++) cout << ' ' << dfs[i];
return 0;
}

原题链接:PTA | 程序设计类实验辅助教学平

L2-035 完全二叉树的层序遍历的更多相关文章

  1. 2020天梯赛总决赛L2-3 完全二叉树的层序遍历 (25分)

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

  2. PAT A1155 Heap Paths (30 分)——完全二叉树,层序遍历,特定dfs遍历

    In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...

  3. PAT A1147 Heaps (30 分)——完全二叉树,层序遍历,后序遍历

    In computer science, a heap is a specialized tree-based data structure that satisfies the heap prope ...

  4. PAT L2-011 玩转二叉树(二叉树层序遍历)

    给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出 ...

  5. PTA 7-10 树的遍历(二叉树基础、层序遍历、STL初体验之queue)

    7-10 树的遍历(25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数 ...

  6. [LeetCode] Binary Tree Level Order Traversal II 二叉树层序遍历之二

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  7. [LeetCode] Binary Tree Zigzag Level Order Traversal 二叉树的之字形层序遍历

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...

  8. [LeetCode] Binary Tree Level Order Traversal 二叉树层序遍历

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  9. 二叉树的层序遍历 BFS

    二叉树的层序遍历,或者说是宽度优先便利,是经常考察的内容. 问题一:层序遍历二叉树并输出,直接输出结果即可,输出格式为一行. #include <iostream> #include &l ...

  10. JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)

    import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import java.util.Queue; ...

随机推荐

  1. JavaWeb相关学习环境的配置(一)

    JavaWeb相关学习环境的配置(一) 之 JDK的配置 步骤: 1.去官网找到自己想要下载的版本: 官网地址:https://www.oracle.com/java/technologies/dow ...

  2. Javaweb学习笔记第五弹

    preparedStatement 防止SQL注入:将敏感字符进行转义 1.获取PreparedStatement对象 String sql="selct * from 表名 where 列 ...

  3. singleflight 使用记录以及源码阅读

    singleflight 使用方法以及源码阅读 1.简介 安装方式: go get -u golang.org/x/sync/singleflight singleflight 是Go官方扩展同步包的 ...

  4. http-server 服务配置跨域

    http-server --cors -p 9999 http-server --cors -p 9999 -c-1 (禁用缓存)

  5. 常用脚本学习手册——Bat脚本

    常用脚本学习手册--Bat脚本 我们在日常工作中常常会遇到一些需要重复进行的工作,又或者我们的项目在转交客户时需要去简化配置过程 这时我们就需要使用到一些自动化部署操作,我们常常会采用脚本来完成这部分 ...

  6. yaml-cpp YAML格式处理库的介绍和使用(面向业务编程-文件格式处理)

    yaml-cpp YAML格式处理库的介绍和使用(面向业务编程-文件格式处理) YAML格式介绍 YAML的格式介绍,有关ini.json和xml或许很多人已经很了解了,但是关于YAML,还有许多人不 ...

  7. Plot函数用法详解——R语言

    plot是R中的基本画图工具,直接plot(x),x为一个数据集,就能画出图,soeasy!但是细节往往制胜的关键,所以就详细来看看plot的所有可设置参数及参数设置方法.R语言的基础绘图系统主要由基 ...

  8. stable diffusion打造自己专属的LORA模型

    通过Lora小模型可以控制很多特定场景的内容生成. 但是那些模型是别人训练好的,你肯定很好奇,我也想训练一个自己的专属模型(也叫炼丹-_-). 甚至可以训练一个专属家庭版的模型(family mode ...

  9. 麻了,不要再动不动就BeanUtil.copyProperties!!!

    前言 最近项目上要求升级一个工具包hutool的版本,以解决安全漏洞问题,这不升级还好,一升级反而捅出了更大的篓子,究竟是怎么回事呢? 事件回顾 我们项目原先使用的hutool版本是5.7.2,在代码 ...

  10. GDOU-CTF-2023新生赛Pwn题解与反思

    第一次参加CTF新生赛总结与反思 因为昨天学校那边要进行天梯模拟赛,所以被拉过去了.16点30分结束,就跑回来宿舍开始写.第一题和第二题一下子getshell,不用30分钟,可能我没想那么多,对比网上 ...