华为OD机试真题——二叉树中序遍历(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 200分 题型
本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析;
并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式!
2025华为OD真题目录+全流程解析/备考攻略/经验分享
华为OD机试真题《二叉树中序遍历》:
目录
- 题目名称:二叉树中序遍历
- 题目描述
- 示例
- Java
- 题目分析
- 解决思路
- Java 代码实现
- 代码详细解析
- 示例测试
- 综合分析
- python
- 题目分析
- 解决思路
- Python 代码实现
- 代码详细解析
- 示例测试
- 示例1:
- 示例2:
- 综合分析
- JavaScript
- 题目分析
- 解决思路
- JavaScript 代码实现
- 代码详细解析
- 示例测试
- 示例1:
- 示例2:
- 综合分析
- C++
- 题目分析
- 解决思路
- C++ 代码实现
- 代码详细解析
- 示例测试
- 示例1:
- 示例2:
- 综合分析
- C语言
- 解决思路
- C 代码实现
- 代码详细解析
- 示例测试
- 示例1:
- 示例2:
- 综合分析
- GO
- 问题分析
- 解决思路
- Go 代码实现
- 代码详细解析
- 示例测试
- 示例1:
- 示例2:
- 综合分析
题目名称:二叉树中序遍历
- 知识点:字符串解析、栈操作(递归)
- 时间限制:1秒
- 空间限制:256MB
- 限定语言:不限
题目描述
输入一个由字母、大括号和逗号组成的字符串表示二叉树结构:
- 单个字母表示节点值,大括号内为子节点,逗号分隔左、右子节点。逗号前为空则左子节点为空,无逗号则右子节点为空。
- 例如,输入
a{b{c},d{e,f}}
表示根节点为a
,左子节点为b{c}
(b
有左子节点c
),右子节点为d{e,f}
(d
有左子节点e
,右子节点f
)。
输入描述
一行字符串,表示二叉树结构,如 a{b{d,e{g,h{,i}}},c{f}}
。
输出描述
输出中序遍历结果的拼接字符串,如 dbgehiafc
。
示例
输入:
a{b{d,e{g,h{,i}}},c{f}}
输出:
dbgehiafc
补充说明
- 节点数不超过 100。
- 输入字符串格式正确,无需校验。
Java
题目分析
我们需要将特定格式的字符串转换为二叉树结构,并进行中序遍历。字符串格式为:每个节点由字母表示,子节点用大括号包裹,逗号分隔左右子节点。例如,a{b{c},d{e,f}}
表示根节点 a
有左子节点 b
(其左子节点为 c
)和右子节点 d
(其左右子节点为 e
和 f
)。
解决思路
- 字符串解析:使用递归和栈的思想处理嵌套结构,分割左右子节点。
- 树构建:递归解析每个节点及其子节点,构建二叉树。
- 中序遍历:递归遍历二叉树,拼接结果。
Java 代码实现
import java.util.*;class TreeNode {char val;TreeNode left;TreeNode right;TreeNode(char x) { val = x; }
}public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String input = scanner.nextLine().trim();TreeNode root = parse(input);String result = inorder(root);System.out.println(result);}// 解析字符串为二叉树private static TreeNode parse(String s) {if (s.isEmpty()) return null;int i = 0;// 提取当前节点值(第一个字母)char val = s.charAt(i++);TreeNode node = new TreeNode(val);// 检查是否有子节点(是否有 '{')if (i < s.length() && s.charAt(i) == '{') {int start = i;int count = 1; // 括号层数计数器i++; // 跳过 '{'// 找到匹配的 '}'while (i < s.length() && count > 0) {if (s.charAt(i) == '{') count++;else if (s.charAt(i) == '}') count--;i++;}// 子节点部分(去掉外层括号)String children = s.substring(start + 1, i - 1);// 分割左右子节点List<String> parts = splitChildren(children);node.left = parse(parts.get(0));node.right = parse(parts.get(1));}return node;}// 分割左右子节点字符串private static List<String> splitChildren(String s) {List<String> parts = new ArrayList<>();int count = 0; // 括号层数int splitIndex = -1;// 遍历找到第一个外层逗号for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);if (c == '{') count++;else if (c == '}') count--;else if (c == ',' && count == 0) {splitIndex = i;break;}}if (splitIndex != -1) { // 存在分割点parts.add(s.substring(0, splitIndex));parts.add(s.substring(splitIndex + 1));} else { // 无分割点,整个字符串是左子节点parts.add(s);parts.add("");}return parts;}// 中序遍历二叉树private static String inorder(TreeNode root) {if (root == null) return "";return inorder(root.left) + root.val + inorder(root.right);}
}
代码详细解析
- TreeNode 类:定义二叉树的节点结构,包含值和左右子节点。
- parse 方法:
- 提取节点值,处理子节点部分。
- 使用括号层数计数器匹配
{}
,截取子节点字符串。 - 递归解析左右子节点。
- splitChildren 方法:
- 遍历子节点字符串,找到第一个外层逗号分割左右子节点。
- 处理嵌套括号,确保分割正确。
- inorder 方法:递归中序遍历,拼接结果字符串。
示例测试
示例1:
输入:a{b{d,e{g,h{,i}}},c{f}}
输出:dbgehiafc
解析过程:
- 根节点
a
,左子节点b
和右子节点c
。 b
的左子节点d
,右子节点e
。e
的左子节点g
,右子节点h
。h
的右子节点i
,c
的左子节点f
。- 中序遍历顺序:
d -> b -> g -> e -> h -> i -> a -> f -> c
。
示例2:
输入:x{y{z},w}
输出:zyxw
解析过程:
- 根节点
x
,左子节点y
和右子节点w
。 y
的左子节点z
。- 中序遍历顺序:
z -> y -> x -> w
。
综合分析
- 高效性:递归解析字符串,时间复杂度 O(n)。
- 健壮性:处理嵌套括号和逗号分割,确保正确分割子节点。
- 简洁性:利用递归和字符串操作,代码逻辑清晰。
- 适用性:完全符合题目要求,处理各种边界条件。
python
题目分析
我们需要将特定格式的字符串转换为二叉树结构,并进行中序遍历。字符串格式规则为:单个字母表示节点值,大括号内为子节点,逗号分隔左、右子节点。例如,a{b{c},d{e,f}}
表示根节点 a
的左子节点为 b
(其左子节点为 c
),右子节点为 d
(其左右子节点为 e
和 f
)。
解决思路
- 字符串解析:递归解析字符串,处理嵌套的大括号结构,分割左右子节点。
- 树构建:根据解析结果递归构建二叉树。
- 中序遍历:递归遍历二叉树,拼接结果字符串。
Python 代码实现
class TreeNode:def __init__(self, val):self.val = valself.left = Noneself.right = Nonedef parse(s):"""解析字符串为二叉树:param s: 当前处理的子字符串(如 "a{b{c},d{e,f}}"):return: 当前子树的根节点"""if not s:return None# 提取当前节点值(第一个字符)val = s[0]node = TreeNode(val)idx = 1 # 当前处理位置的索引# 检查是否有子节点(是否有 '{')if idx < len(s) and s[idx] == '{':idx += 1 # 跳过 '{'start = idxcount = 1 # 括号层数计数器# 找到匹配的 '}'while idx < len(s) and count > 0:if s[idx] == '{':count += 1elif s[idx] == '}':count -= 1idx += 1# 提取子节点部分(去掉外层 '{}')children_str = s[start: idx-1]# 分割左右子节点字符串left_str, right_str = split_children(children_str)# 递归处理左子树和右子树node.left = parse(left_str)node.right = parse(right_str)return nodedef split_children(s):"""分割左右子节点字符串(处理嵌套括号):param s: 子节点部分的字符串(如 "b{c},d{e,f}"):return: (左子节点字符串, 右子节点字符串)"""count = 0 # 括号层数split_idx = -1# 遍历寻找最外层的逗号for i, c in enumerate(s):if c == '{':count += 1elif c == '}':count -= 1elif c == ',' and count == 0:split_idx = ibreak # 找到第一个可分割的逗号if split_idx != -1:# 分割左、右子节点部分return s[:split_idx], s[split_idx+1:]else:# 无逗号表示只有左子树,右子树为空return s, ''def inorder(root):"""中序遍历二叉树,拼接结果字符串:param root: 当前节点:return: 遍历结果字符串"""if not root:return ''return inorder(root.left) + root.val + inorder(root.right)# 输入处理
input_str = input().strip()
root = parse(input_str)
print(inorder(root))
代码详细解析
TreeNode
类
class TreeNode:def __init__(self, val):self.val = valself.left = Noneself.right = None
- 定义二叉树节点结构,包含值和左右子节点。
parse
函数
def parse(s):if not s:return Noneval
相关文章:

华为OD机试真题——二叉树中序遍历(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 2025华为OD真题目录+全流程解析/备考攻略/经验分享 华为OD机试真题《二叉树中序遍历》: 目录 …...
解决 Go 中 `loadinternal: cannot find runtime/cgo` 错误
在 Go 开发中,loadinternal: cannot find runtime/cgo 是一个相对不常见但可能令人困惑的错误。这个错误通常与 CGO 的使用和配置有关。本文将探讨这个错误的成因,并提供解决方案,帮助你在未来的开发中避免类似问题。 错误背景 在 Go 项目中…...

VSCode + GD32F407 构建烧录
前言 最近调试一块 GD32F407VET6(168Mhz,8Mhz晶振) 板子时,踩了一些“启动失败”的坑。本以为是时钟配置有误,最后发现是链接脚本(.ld 文件)没有配置好,导致程序根本没能正常执行 ma…...

Linux研学-入门命令
一 目录介绍 1 介绍 Linux与Windows在目录结构组织上差异显著:Linux采用树型目录结构,以单一根目录/为起点,所有文件和子目录由此向下延伸形成层级体系,功能明确的目录各司其职,使文件系统层次清晰、逻辑连贯…...
Hive在实际应用中,如何选择合适的JOIN优化策略?
在实际应用中选择Hive JOIN优化策略时,需综合考虑数据规模、分布特征、表结构设计、集群资源及业务需求。以下是具体的决策流程和参考标准: 一、数据特征分析 1. 统计数据规模 通过DESCRIBE FORMATTED table_name查看表大小和分区信息。使用SELECT CO…...

设计模式之结构型:桥接模式
桥接模式(Bridge Pattern) 定义 桥接模式是一种结构型设计模式,通过将抽象部分与实现部分分离,使它们可以独立变化。它通过组合代替继承,解决多层继承导致的类爆炸问题,适用于多维度变化的场景(如形状与颜…...

监控 Oracle Cloud 负载均衡器:使用 Applications Manager 释放最佳性能
设想你正在运营一个受欢迎的在线学习平台,在考试前的高峰期,平台流量激增。全球的学生同时登录,观看视频、提交作业和参加测试。如果 Oracle Cloud 负载均衡器不能高效地分配流量,或者后端服务器难以应对负载,学生可能…...

早发现=早安心!超导心磁图如何捕捉早期病变信号?
随着生活节奏的加快,心血管疾病已成为威胁人们健康的“隐形杀手”。据国家心血管病中心发布的《中国心血管健康与疾病报告2022》显示,我国心血管病现患者人数已高达3.3亿,每5例死亡中就有2例死于心血管病。这一数据触目惊心,提醒我…...

使用Vditor将Markdown文档渲染成网页(Vite+JS+Vditor)
1. 引言 编写Markdown文档现在可以说是程序员的必备技能了,因为Markdown很好地实现了内容与排版分离,可以让程序员更专注于内容的创作。现在很多技术文档,博客发布甚至AI文字输出的内容都是以Markdown格式的形式输出的。那么,Mar…...
Python打卡DAY40
知识点回顾: 彩色和灰度图片测试和训练的规范写法:封装在函数中展平操作:除第一个维度batchsize外全部展平dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropout 作业:仔细学习下测试和训练代码…...

OPC Client第6讲(wxwidgets):Logger.h日志记录文件(单例模式);登录后的主界面
接上一讲三、2、2>4》,创建logger.h和helper_t.h里的gettime函数 即解决下图的报红 同时,接上一讲二、3、点击“确认”按钮后,进入MainFrame.h对应的下述界面,此讲下图进行实现 一、创建Logger.h:日志记录文件&…...
CesiumInstancedMesh 实例
CesiumInstancedMesh 实例 import * as Cesium from cesium;// Three.js 风格的 InstancedMesh 类, https://threejs.org/docs/#api/en/objects/InstancedMesh export class CesiumInstancedMesh {/*** Creates an instance of InstancedMesh.** param {Cesium.Geometry} geom…...

单细胞注释前沿:CASSIA——无参考、可解释、自动化细胞注释的大语言模型
细胞类型注释是单细胞RNA-seq分析的重要步骤,目前有许多注释方法。大多数注释方法都需要计算和特定领域专业知识的结合,而且经常产生不一致的结果,难以解释。大语言模型有可能在减少人工输入和提高准确性的同时扩大可访问性,但现有…...

历年武汉大学计算机保研上机真题
2025武汉大学计算机保研上机真题 2024武汉大学计算机保研上机真题 2023武汉大学计算机保研上机真题 在线测评链接:https://pgcode.cn/school 分段函数计算 题目描述 写程序计算如下分段函数: 当 x > 0 x > 0 x>0 时, f ( x ) …...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(30):みます
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(30):みます 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)ように 復習:1、ように Change12、ように Ideal state(理想(りそう)の状態(じょうたい))3、V辞書・Vない ようにしています いつも気をつけて…...

AR-HUD 光波导方案优化难题待解?OAS 光学软件来破局
波导-HUD系统案例分析 简介 光波导技术凭借其平板超薄结构和强大的二维扩展能力,在解决AR-HUD问题方面展现出显著优势。一方面,其独特的结构特性能够大幅减小对光机体积的需求,成为 HUD 未来发展的重要技术方向;另一方面…...

火狐安装自动录制表单教程——仙盟自动化运营大衍灵机——仙盟创梦IDE
打开火狐插件页面 安装完成 使用 功能 录制浏览器操作 录入地址 开始操作 录制完成 在当今快速发展的软件开发生态中,自动化测试已从一种新兴技术手段,转变为保障软件质量与开发效率不可或缺的关键环节。其重要性体现在多个维度,同时&#x…...

线程池的详细知识(含有工厂模式)
前言 下午学习了线程池的知识。重点探究了ThreadPoolExecutor里面的各种参数的含义。我详细了解了这部分的知识。其中有一个参数涉及工厂模式,我将这一部分知识分享给大家~ 线程池的详细介绍(含工厂模式) 结语 分享到此结束啦。byebye~...

木愚科技闪亮第63届高博会 全栈式智能教育解决方案助力教学升级
5月23日,第63届高等教育博览会在长春东北亚国际博览中心开幕,木愚科技积极筹备,奔赴展会现场。彼时,木愚科技企业领导及相关职能部门负责人亲临展位指导工作,通过特装展位、资料发放及现场交流等方式,全方位…...

Proteus寻找元器件(常见)
一 元件库 二 找元件 1 主控 32 51 输入 stm32 AT89c51 2 找屏幕 oled 3 找按键button 4 电阻、电容 res cap 5 电机驱动 l298n 6 电机 motor 7 滑动变阻器 pot 8 找电源和 GND 9 找晶振 选择 D 开头的 CRYSTAL 10 网络标签...

RK3566 Android12 HG24C02MM/TR EEPROM适配
一、背景 近期项目中,有一个需求,要使用RK3566 Android12平台适配一款HG24C02MM/TR EEPROM芯片,通过i2c实现主板与EEPROM芯片的数据通讯。废话不多说,来看资料。 二、芯片资料 HG24C02 / HG24C04 / HG24C08 / HG24C16是提供2048…...

IoTDB 集成 DBeaver,简易操作实现时序数据清晰管理
数据结构一目了然,跨库分析轻松实现,方便 IoTDB “内部构造”管理! 随着物联网场景对时序数据处理需求激增,时序数据库与数据库管理工具的集成尤为关键。作为数据资产的 “智能管家”,借助数据库管理工具的可视化操作界…...

sqli-labs第二十八关——Trick with ‘union select‘
一:分析 这一关的提示和上一关一样,所以我们查看源码,屏蔽了注释符,空格,union,select等关键词 分析这一条源码的几个新增添符号 \s: 匹配任何的空白字符(普通空格,\t&…...

mapbox高阶,PMTiles介绍,MBTiles、PMTiles对比,加载PMTiles文件
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️Fill面图层样式1.4 ☘️PMTiles介绍1.5…...
Go语言通道如何实现通信
在Go语言中,通道(channel)是一种内置的数据结构,用于在不同的goroutine之间进行通信和同步。通道提供了一种安全且有效的方式来传递数据,避免了数据竞争和死锁等问题。 要在Go语言中使用通道进行通信,你需…...

投稿 IEEE Transactions on Knowledge and Data Engineering 注意事项
投稿 IEEE Transactions on Knowledge and Data Engineering 注意事项 要IEEE overleaf 模板私信,我直接给我自己论文,便于编辑 已经投稿完成了,有一些小坑 准备工作 注册IEEE账户:若没有IEEE账户,需前往IEEE官网注册。注册成功后,可用于登录投稿系统。现在新的系统,…...
题目 3316: 蓝桥杯2025年第十六届省赛真题-数组翻转
题目 3316: 蓝桥杯2025年第十六届省赛真题-数组翻转 时间限制: 3s 内存限制: 512MB 提交: 101 解决: 24 题目描述 小明生成了一个长度为 n 的正整数数组 a1, a2, . . . , an,他可以选择连续的一 段数 al , al1, ..., ar,如果其中所有数都相等即 al al1 …...

mongodb源码分析session接受客户端find命令过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制。 现在继续研究ASIOSession和connection是怎么接受客户端命令的? mongo/transport/service_state_machine.cpp核心方法有…...
Netty 实战篇:为自研 RPC 框架加入异步调用与 Future 支持
我们在上篇实现了一个轻量级 RPC 框架,现在要进一步优化 —— 加入异步响应支持,让 RPC 通信变得真正高效、非阻塞、支持并发。 一、为什么需要异步调用? 上篇的 RPC 框架是“同步阻塞”的: 每次发送请求后,必须等待服…...
python37天打卡
知识点回顾: 过拟合的判断:测试集和训练集同步打印指标 模型的保存和加载 仅保存权重 保存权重和模型 保存全部信息checkpoint,还包含训练状态 早停策略 作业:对信贷数据集训练后保存权重,加载权重后继续训练50轮&am…...