当前位置: 首页 > news >正文

完美二叉树的 层序 与 前/中/后 序之间的相互转换

给出完美二叉树(或者完全二叉树)的层序遍历,转换为前中后序

对于一个层序序列中某个下标为u的数,它在二叉树中对应节点的左节点在层序遍历中的下标为2 * u,右节点为2 * u + 1。

根据这个规律,我们就可以构建出一个完美二叉树(因为每个节点在二叉树中的左右关系都清楚了)

接下来就是怎么把对应的数字填到后序遍历,前序遍历和中序遍历的数组里面。

我们通过递归函数遍历 层序序列 ,按上面的规律就可以遍历二叉树的每一个节点,比如从1开始(根节点),2是左节点,3是右节点,依次递推。那么剩下的事情就是遍历每个点的时候该把层序序列中的哪个数放进当前的节点。

设计一个dfs函数,其作用是给当前节点填值。

  • 前序遍历的特点是 : 根 -> 左 -> 右。我们需要先填根节点,再填左子树,再填右子树。
  • 中序遍历的特点是 : 左 -> 根 -> 右。我们需要先填左子树,再填根节点,再填右子树。
  • 后序遍历的特点是 : 左 -> 右 -> 根。我们需要先填左子树,再填右子树,再填根节点。
#include<iostream>
using namespace std;
int curr;
int post[100010];
int pre[100010];
int in[100010];
int n;//这里注意了!由于curr是post,in,pre的下标,而**u**是a的下标,且u是从1开始的,所以在main函数中输入a的时候,要从1开始输入!
void dfs_post(int u);
{if( u > n ) return ;dfs_post(2 * u);dfs_post(2 *u + 1);post[curr ++] = a[u];}void dfs_pre(int u)
{if( u > n ) return ; pre[curr ++] = a[u];dfs_pre(2 * u);dfs_pre(2 * u + 1);}void dfs_in(int u)
{if( u > n ) return ;dfs_in(2 * u);in[curr ++] = a[u];dfs_in(2 * u + 1);
}int main()
{cin>>n;for(int i = 1 ; i <= n ; i++){cin>>a[i];}dfs_post(1);curr = 0;dfs_in(1);curr = 0;dfs_pre(1);curr = 0;//输出操作省略}

给出前序或中序或后序,转换为层序遍历

这里涉及到创新思维。

可以发现,这个过程就是上一个过程反过来

我们这里拿后序遍历做例子:

post[curr ++] = a[u];

这行代码可以看作是从层序序列\(a\)中拿出一个数填进\(post\)数组里,现在我们的目标是从post数组里拿出数填进\(a\)中。

怎么放进去,就怎么拿出来
所以我们可以直接写成:

a[u] = post[curr ++];

在第二个过程里面,我们同样要注意的是,这里的u是a的下标,curr是post的下标,u从1开始,curr从0开始,所以在main函数里输入post的时候是从0开始输入的,与第一个过程有区别。

补充几点

一、当题目有镜像要求时,只需要将两个递归函数调换一下位置,先递归右子树,再递归左子树

二、填数时,容易将两个下标搞混,这里提供一种记忆方法:
首先,记住,dfs函数的作用是给当前节点填数。
然后我们根据curr的大小进行选择。
在第一个过程中,我们是从层序序列中拿出数填进对应序列里,而dfs(1)的时候,我们要将层序序列第一位放进去,还是拿后序序列举例,根几点是最后填的,这时候curr达到最大值,所以其对应的是后续序列的最后一位,因此curr就是post的下标,而u等于1刚好对应了层序序列的第一位,也是根几点。然后类比到其他序列;
在第二个过程中,拿后续序列举例,将后序转换为层序,u == 1时,应该填进层序的第一位,所以u是a的下标,curr达到最大,对应post的最后一位,所以curr是post的下标。

完结!

如果有错误希望大家能指出,感谢!

http://www.jsqmd.com/news/655212/

相关文章:

  • 2026年重庆天圆地方厂家评价排行榜:三通/法兰风管/圆形风管/异形弯头/角铁风管 - 品牌策略师
  • AMBA总线架构演进:Multi-Layer AHB如何重塑片上系统互连
  • 2026宝鸡纯钛棒厂家推荐/TC4钛棒生产厂家推荐:宝鸡鹰翔钛业,源头直供品质钛棒 - 栗子测评
  • OpenTwins实战指南:从零构建你的第一个数字孪生系统
  • 2026圆钢零切加工厂家哪家好?40CrNiMo圆钢生产厂家推荐:无锡润坤特钢,工业圆钢不踩坑指南 - 栗子测评
  • WarcraftHelper:魔兽争霸3终极兼容性解决方案,让经典游戏在现代电脑上完美运行
  • 2026年天津离婚财产分割律所深度测评!千案实战+透明收费首选指南 - 速递信息
  • 中式风味 + 伊利特供奶源 叙白手作鲜乳冰淇淋 一店多营创收广 - 速递信息
  • 如何让Windows成为Linux GUI应用的完美舞台:VcXsrv深度解析
  • NMN哪个产品最好?2026年度NMN品牌多维度评测,抗衰老品牌10款硬核优势解析榜 - 资讯焦点
  • 非标异型法兰盘厂家哪家性价比高?实力厂家推荐 - 品牌推荐大师
  • Synopsys验证VIP实战解析:总线事务的精细化约束与覆盖率驱动配置
  • 极简生活|闲置天猫超市卡,这样变现无负担 - 团团收购物卡回收
  • Cyber Triage 3.17 发布 - 使用生成式 AI 增强并生成 DFIR 数字痕迹报告
  • SerialPlot:让串口数据会说话的零门槛可视化神器
  • 如何评估石英制品生产企业,聊聊口碑好的源头厂家怎么选择 - myqiye
  • 2026年AI编码CLI工具终极对比:Claude Code、Cursor、Gemini CLI、Codex CLI、Copilot CLI
  • 2026年4月武汉电石料厂家推荐:武汉电石料/乙烯料/烧碱/ PVC树脂 /SG型树脂认准武汉广聚昌贸易有限公司 - 2026年企业推荐榜
  • 规范采购入口,筑牢管控防线——融智天费用控制系统采购申请管理体验 - 业财科技
  • 2026 大型军事仿真模型行业分析:五家重点企业实力对比解析 - 深度智识库
  • 别再手动调参了!用MATLAB的PSO工具箱自动优化滑模控制器(附完整代码)
  • 3种高效方法在Windows上安装APK文件:告别模拟器的轻量级解决方案
  • 2026场馆采购不踩坑!盘点生产活动座椅、伸缩座椅,伸缩活动看台的靠谱厂家,推荐山东阜康活动座椅、伸缩看台、伸缩座椅厂家 - 栗子测评
  • NMN品牌会员体系对比:2026年从积分规则到专属优惠,这样注册会员买NMN最省钱 - 资讯焦点
  • 盘点2026年日立电梯代理商服务,哪家口碑好为你详细解读 - mypinpai
  • 2026昆明有害生物防治行业全景解析|5家标杆企业排序,除四害、灭老鼠、灭蟑螂、杀虫服务谁更具优势? - 深度智识库
  • Gradio权限管控:雯雯的后宫-造相Z-Image-瑜伽女孩企业内网访问安全配置
  • Windows 11精简终极实战指南:tiny11builder高效系统定制方案
  • 2026年好用的西点烘焙学校推荐,口碑不错的品牌机构哪家好 - 工业品牌热点
  • 实力强的静音房厂家有哪些,分享静音房加工厂的选购要点 - 工业设备