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

L2-006 数的遍历(递归经典 ,图论 )

题目描述

给出二叉树后序遍历和中序遍历 , 请你输出它的前序遍历,这里假设键值都是互不相等的正整数。

输入示例

第一行给出一个正整数n,第二行给出后序遍历,第三行给出中序遍历

输出示例

输出前序遍历 O(∩_∩)O 。

解题思路

虽然 柳婼 大大说这题不用建树,但是我就要建┗|`O′|┛

递归建树 + BFS :

  1. 对于一个一般的二叉树 , 我们只有联立 中序 + 前(后)序 才能建树 , 我们要先从中序中找到根节点(后序的最后一个数在哪个位置)

  2. 找到根后,中序遍历被分为两半 , 我们可以找到相对应的区间进行建树,如图 :

二叉树

假设根在 中序遍历 中的下标为 \(k\) , 那么左子树的节点个数为:numleft = k - il (去掉根) , 那么左子树对应的建树区间就是:后序[pr , pr + (numleft-1)] 中序[il,k-1] 。 右子树对应的建树区间就是: 后序[pr + numleft] ,中序[k,ir]

递归结束后返回root

3.BFS遍历输出层序遍历
需要用一个res数组来存层序遍历结果

ac✅️代码

#include<iostream>
#include<queue>
#include<unordered_map>
#include<vector>
using namespace std;
int post[35],in[35];
unordered_map<int,int> l,r,pos;//il是中序区间的左边界,ir是右边界;
int build(int pl,int pr,int il,int ir)
{if(pl>pr) return 0;int root = post[pr];int k = pos[root];int numleft = k - il;//这里的post区间与in区间是对应的,可以画个图。l[root] = build(pl,pl + (numleft - 1) , il , k - 1);//中序右区间右边界不变r[root] = build(pl + numleft,pr-1,k+1,ir);return root;//这里不要o(>﹏<)o去想后序的递归过程专心于第一次就行,不然会很麻烦
}void levelOrder(int startNode)
{vector<int> res;queue<int> q;q.push(startNode);while(!q.empty()){int curr = q.front();q.pop();if(curr == 0) continue;res.push_back(curr);if(l[curr] != 0) q.push(l[curr]);if(r[curr] != 0) q.push(r[curr]);	}for(int i = 0 ; i < res.size() ; i++){cout<<res[i];if(i != res.size() - 1) cout<<" ";}
}int main()
{int n;cin>>n;for(int i = 0 ; i < n ; i++) cin>>post[i];for(int i = 0 ; i < n ; i++) {cin>>in[i];pos[in[i]] = i ;}int root = build( 0 , n - 1 , 0 , n -1 );levelOrder(root);return 0;}

总结

其实这里的递归不太好写,以后写递归的时候,不要去想后序的递归过程然后再写递归函数的参数,这会很麻烦,不如就研究第一次的对象 , 还有一个就是return root的位置也需要理解递归函数。
一旦调用递归函数,会在这条路上一直走到尽头。
o(╥﹏╥)o

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

相关文章:

  • Phi-3-Mini-128K部署优化:bfloat16 vs float16显存与推理速度实测对比
  • Qwen3-TTS问题解决:常见部署错误排查,快速搞定语音合成
  • DAMO-YOLO快速体验:开箱即用的赛博朋克AI视觉工具
  • 从零构建认知:数据库系统核心概念与演进脉络深度解析
  • C++与区块链智能合约
  • 全面解读 Databricks:从架构、引擎到优化策略
  • java零碎知识(更新中)
  • Xiaojie雷达之路---毫米波雷达实战解析---相位差在速度测量中的关键作用
  • 基于SGL8022W的MOSS环形触摸灯硬件设计
  • 3步解锁音乐自由:NCMconverter全功能解析与实战指南
  • re2
  • 3步实现空间信息解析:开源号码定位工具全流程指南
  • Llama-3.2V-11B-cot开源可部署价值:替代商业API的私有化视觉推理方案
  • 多维动态规划 技巧(精选答案)
  • 全球智能驾驶SoC市场规模与算力分层演进深度分析
  • MWC 2026 十大亮点:AI 统治全场,6G 抢跑,折叠屏成熟
  • 一键部署Qwen3-ASR-0.6B:支持中文方言的语音识别模型体验
  • 2026年商务办公复印纸深度测评:基于流畅性与环保性的五维实战对比 - 品牌推荐
  • 大模型集体“消极怠工”上热搜:你的AI,是不是也开始摆烂了?
  • 2026年建筑装饰选型指南:铝单板厂家精准适配与大型项目合作实测 - 品牌推荐
  • 造相-Z-Image-Turbo LoRA Web服务保姆级部署指南:GPU显存优化+免配置启动
  • ESP32-Type-C PD协议交互式电流表设计
  • PHP 8.9大文件处理性能跃迁(Fiber+FFI零拷贝架构深度拆解)
  • 二、Ingress部署实战:从零到一的生产环境搭建指南
  • RMBG-2.0开源模型价值:支持LoRA微调,适配垂直领域定制需求
  • 基于天空星STM32F407的DHT11单总线温湿度传感器驱动移植与数据解析实战
  • 二叉树(精选答案)
  • 利用InternLM2-Chat-1.8B构建学术论文润色与语法检查工具
  • 【训练营】第1篇:基于ESP32-C3/ESP32的智能调光器硬件设计详解(兼容安信可模块)
  • 无锁编程与原子操作