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

福怡嘉快餐 2026/09/09 17:43:44

题目描述

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

输入格式

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

石家庄网站建设成都建设网站

在 iOS 开发中,用户界面的动态效果往往能大大提升用户体验。今天我们将探讨如何在 SwiftUI 中实现一个动态变色的Picker,根据优先级选择器的不同选项,动态改变背景颜色。这不仅让界面更加生动

2026/06/30 12:19:00

佛山网站建设商务网站建设

标签:#HarmonyOS #ArkTS #TypeScript #前端工程化 #OHPM #效率工具😲 前言:前端资产的“第二春”在鸿蒙 Next 生态中

2026/06/30 12:49:33

如何建设网站万州网站建设

Slate像素画编辑器终极指南:从新手到高手的完整手册【免费下载链接】slatePixel Art Editor项目地址: https://gitcode.com/gh_mirrors/

2026/06/30 13:23:35

建设局网站物流网站建设

Windows 11任务栏拖放功能深度优化指南【免费下载链接】Windows11DragAndDropToTaskbarFix"Windows 11 Drag & Drop to th

2026/06/30 13:27:05

海南网站建设网站建设工作室

引言:虚拟机性能优化的重要性在当今的云计算、开发测试和企业IT环境中,虚拟机已成为基础设施的核心组成部分。然而,虚拟机性能问题——特别是卡顿、响应迟缓、资源争

2026/06/30 12:05:59

网站建设维护濮阳网站建设

随着微信生态流量的持续爆发,搭建专属微信店铺小程序已成为企业、创业者数字化转型的核心选择。但多数人困惑 “微信上怎么做自己的店铺小程序”,且担心定制化不足、后期无法拓展。象

2026/06/30 11:11:24

网站建设流程徐家汇网站建设

Langchain-Chatchat CVSS评分理解问答平台在网络安全领域,面对每年数以万计的漏洞报告和复杂的CVSS评分体系,安全团队常常陷入“信息过载”的困境。一个典

2026/06/30 10:22:19

怎么建设网站广州网站建设

A站视频下载终极神器:AcFunDown新手完全指南【免费下载链接】AcFunDown包含PC端UI界面的A站 视频下载器。支持收藏夹、UP主视频批量下载 😳仅供交流学习

2026/06/30 10:19:20

中山网站建设网站建设案例

Hunyuan-MT-7B与数据库字段多语言映射自动化方案在现代企业信息化系统中,一个看似不起眼的“字段名”背后,往往藏着复杂的国际化难题。比如,“用户姓名”

2026/06/30 10:51:22

医院网站建设南京网站建设

快速体验打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容:创建一个快速FLOW MATCHING原型生成器。功能要求:1

2026/06/30 13:47:07