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

新二叉树(洛谷P1305)

题目描述

输入一串二叉树,输出其前序遍历。

输入格式

第一行为二叉树的节点数 n。(1≤n≤26)

后面 n 行,第一个字母为节点,后两个字母分别为其左右儿子。特别地,数据保证第一行读入的节点必为根节点。

空节点用*表示

输出格式

二叉树的前序遍历。

输入输出样例

输入 #1复制运行

6 abc bdi cj* d** i** j**

输出 #1复制运行

abdicj

核心逻辑:

在处理二叉树时,初学者习惯用k*2/k*2+1存储左右儿子。但这种顺序存储遇到世代单传子树(只有单边子树的深树)会使下标呈指数级爆炸。

本方案采用静态链表思路:用结构体数组存节点,配合一个计数器cnt分配空间。无论树长成什么样,空间复杂度始终稳定在O(N)。


实现步骤

  1. 定义结构:每个node记录lr数组下标,而不是物理地址。

  2. 动态赋值

    • 第一行输入确定根节点tre[1]

    • 后续输入格式为父节点 左孩子 右孩子

  3. 暴力查找(核心):

    每次读入一行,就去数组里扫一遍,找到那个 data 匹配的节点,然后把它的 l 和 r 指向新分配的 cnt 位置。

  4. 递归输出:标准的先序遍历(根->左->右)。


关键点

  • 关于*的处理:输入如果是*代表空,就不给它分配cnt下标,直接跳过即可。

  • 查找效率:目前代码找父节点用的是O(N)$遍历,对于N=2000的题足够了,但如果节点上万,建议换成unordered_map来秒查位置。

  • 空间预留tre[2000]的大小要根据题目N的范围来定,不开太小,也不开太大。


总结

“数组模拟链表”的做法是竞赛里的“万金油”,既能省去new内存的耗时,又能防止顺序存储的内存溢出。

完整代码

//用链式存储 顺序存储如果是世代单纯 效率太低 #include <iostream> using namespace std; string a; struct node{ int l; int r; char data; }tre[2000]; void preorder(int root){ cout<<tre[root].data; if(tre[root].l) preorder(tre[root].l); if(tre[root].r) preorder(tre[root].r); } int main(){ int n; cin>>n; int cnt=1;//代表存进树中的节点数 cin>>a; //第一行必为根节点,先单独赋值 tre[1].data=a[0]; if(a[1]!='*'){//代表有左儿子 tre[1].l=++cnt; tre[cnt].data=a[1]; } if(a[2]!='*'){//代表有右儿子 tre[1].r=++cnt; tre[cnt].data=a[2]; } for(int i=2;i<=n;i++){ cin>>a; for(int i=1;i<=cnt;i++){ if(tre[i].data==a[0]){//找这次读入的匹配树中哪一个节点 if(a[1]!='*'){//代表有左儿子 tre[i].l=++cnt; tre[cnt].data=a[1]; } if(a[2]!='*'){//代表有右儿子 tre[i].r=++cnt; tre[cnt].data=a[2]; } } } } preorder(1); return 0; }
http://www.rkmt.cn/news/157115.html

相关文章:

  • Sketch实时预览插件:设计师必备的效率革命工具
  • 5分钟快速上手:集成感知与通信ISAC开源项目完全指南
  • Must-Reading-on-ISAC实战手册:从理论到部署的完整指南
  • 28、SQL Server数据操作与查询技巧
  • ClimaX多尺度气象预测系统:技术架构与商业价值解析
  • Open-AutoGLM冷启动难题破解,资深专家亲授6种优化策略
  • Open-AutoGLM智能体电脑的秘密配置,95%用户从未启用的性能加速模式
  • 32、.NET泛型、应用配置与动态加载知识详解
  • 智能小车避障功能背后的电机驱动技术——L298N解析
  • 终极免费指南:B站推送机器人让QQ群实时同步UP主动态
  • 实时火焰检测CNN:从零部署的完整实战指南
  • 微信商城小程序到底要花多少钱?资深小程序服务商为您拆解成本!
  • 2025电力电缆厂家推荐排行榜:从产能与专利看智达云强、徐工电缆实力 - 爱采购寻源宝典
  • 一文搞懂大模型的知识蒸馏(Knowledge Distillation)
  • 文本差异对比技术实战:从业务痛点到企业级解决方案
  • 2025压力机厂家综合实力排名:从产能、专利、质量看东莞市方天机械设备优势 - 爱采购寻源宝典
  • Mobaxterm-Chinese中文版:一站式远程管理终端工具全面解析
  • UniHacker技术解析:跨平台Unity开发环境授权管理方案
  • 如何快速部署LocalColabFold:生物信息学研究的完整本地化解决方案
  • MoveIt2 机器人运动规划实战:从入门到精通的完整指南
  • 广州留学中介哪家强?2025反馈及时度品牌实力榜单揭晓 - 留学品牌推荐官
  • C++ 命名空间
  • 国赫通董事长孙赫宏:以国赫通供应链创新推动青岛汽车出口与实体经济发展 - carinfo
  • GEOAI搜索优化源头厂家深度评测:谁在引领生成式引擎优化新纪元? - 2025年品牌推荐榜
  • CSS遮罩与裁剪:mask与clip-path创建复杂形状的解析
  • VRCX完整指南:掌握VRChat社交管理的7大核心技能
  • Stremio插件社区完全指南:从入门到精通
  • 从产品经理视角看Vant:如何用组件库打造极致用户体验
  • 时空智能数字孪生平台
  • 打造你的专属音乐世界:any-listen私人播放系统深度体验指南