网站建设制作免费建设网站

武汉迈极环保科技有限公司 2026/09/09 18:06:24

题目描述

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

输入格式

第一行为二叉树的节点数 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; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

建设网站公司网站建设运营

MGeo地址匹配结果排序算法原理剖析引言:中文地址匹配的挑战与MGeo的应运而生在地理信息、物流调度、城市计算等场景中,地址相似度匹配是实现数据融合、实体对齐和空间索引构建

2026/06/30 10:11:19

建设网站制作网站建设空间

第一章:Git工作树在Docker环境中的核心价值在持续集成与持续部署(CI/CD)流程中,Git工作树与Docker容器的协同运作成为提升开发

2026/06/30 13:00:34

医院网站建设团购网站建设

群晖DSM 7.2.2 Video Station功能恢复全攻略【免费下载链接】Video_Station_for_DSM_722Script to install Video Station in

2026/06/30 10:16:19

网站建设软件太原网站建设

树莓派5上手实录:从拆盒到系统跑起来上周刚拿到全新的树莓派5,迫不及待开箱折腾了一番。作为一个从树莓派3时代就开始玩的老用户,这次升级真的让我眼前一亮——不只

2026/06/30 12:11:59

asp网站建设资阳网站建设

还在为繁重的职教平台课程任务而烦恼吗?hcqHome智能刷课助手通过自动化技术,帮你轻松应对职教云、智慧职教、资源库三大平台的课程学习需求。这款开源工具不仅能够大幅节省你的

2026/06/30 14:11:39

舟山网站建设宜兴网站建设

北航卡尔曼滤波与组合导航 第三次作业 SINS/GPS组合动态实验本次作业要求进行SINS/GPS组合导航的动态实验,主要涉及卡尔曼滤波和组合导航的相关内容。在Matlab中࿰

2026/06/30 11:40:56

潜江网站建设嘉定网站建设

谷歌趋势分析Qwen-Image-Edit-2509关注度增长曲线在数字内容爆炸式增长的今天,视觉素材的更新速度早已跟不上运营节奏。电商平台每天面临成千上万张商品图的修改需求——换标签、

2026/06/30 13:22:35

外贸网站建设廊坊网站建设

ARM Compiler 5.06 快速上手:从零搭建嵌入式编译链你有没有遇到过这样的情况?代码写得没问题,下载进芯片却“死机”;或者 RAM

2026/06/30 13:40:06

唐山网站建设肇庆网站建设

Bootstrap文件上传终极指南:3分钟学会HTML5多文件选择配置【免费下载链接】bootstrap-fileinputAn enhanced HTML 5 file input f

2026/06/30 13:58:08

苏州网站建设电器网站建设

来源:ScienceAI编辑:&在人类和动物的决策行为中,「犯错」似乎总发生在一瞬间。一次错误的选择、一次反应过慢,往往被理解为当下信息

2026/06/30 11:47:58