华为OD机试真题 新系统 2026-07-05 JavaGoC 实现【二叉树两节点间的最小跳数】
目录题目思路Code题目题目内容给定一棵完全二叉树的层序遍历序列用逗号分隔的节点值字符串表示以及两个目标节点值 frm 和 to求这两个节点之间的最小跳数也就是最短路径经过的边数。完全二叉树按数组下标表示根节点索引为 0索引为 i 的节点父节点索引为 (i-1)//2左子节点索引为 2*i1右子节点索引为 2*i2。如果目标节点不存在返回 -1。如果 frm 和 to 相同且节点存在返回 0。树的节点不重名节点数量范围公开页面仅能确认到 1 到 10^6。输入描述第一行输入字符串形式的层序遍历序列节点值用逗号分隔例如 1,2,3,4,5,6,7。第二行输入起始节点值 frm。第三行输入目标节点值 to。输出描述输出一个整数表示从 frm 到 to 的最小跳数。如果任一节点不存在输出 -1。如果 frm 等于 to 且节点存在输出 0。样例 1输入1,2,323输出2说明从节点 2 到节点 3需要经过 2 到 1 再到 3共 2 跳。样例 2输入1,2,3,4,5,6,745输出2说明节点 4 和节点 5 是兄弟节点路径为 4 到 2 再到 5共 2 跳。思路二叉树先把层序遍历字符串按逗号拆开建立节点值到数组下标的映射。完全二叉树可以直接通过下标计算父节点下标 i 的父节点为 (i-1)//2。分别计算 frm 和 to 所在下标的深度让更深的节点先不断上跳直到两个节点处在同一层。两个节点同层后同步向父节点上跳第一次相遇的位置就是最近公共祖先。最小跳数等于 frm 到最近公共祖先的上跳次数加上 to 到最近公共祖先的上跳次数。如果 frm 或 to 不在映射中直接输出 -1如果两个节点相同且存在输出 0。Codeimport java.util.*; public class Main { private static int depth(int pos) { // 完全二叉树用数组下标表示反复跳到父节点即可得到层数。 int d 0; while (pos 0) { pos (pos - 1) / 2; d; } return d; } private static int minJumps(String treeLine, String from, String to) { String[] nodes treeLine.split(,); MapString, Integer index new HashMap(); // 先记录节点值第一次出现的位置避免后续查找时重复扫描数组。 for (int i 0; i nodes.length; i) { index.putIfAbsent(nodes[i].trim(), i); } if (!index.containsKey(from) || !index.containsKey(to)) { return -1; } if (from.equals(to)) { return 0; } int a index.get(from), b index.get(to); int da depth(a), db depth(b); int originalDa da, originalDb db; while (da db) { // 让更深的节点先上移保证两个候选节点处在同一层。 a (a - 1) / 2; da--; } while (db da) { b (b - 1) / 2; db--; } while (a ! b) { // 同步上移直到下标相同此时就是最近公共祖先。 a (a - 1) / 2; b (b - 1) / 2; } return originalDa originalDb - 2 * depth(a); } public static void main(String[] args) { Scanner sc new Scanner(System.in); if (!sc.hasNextLine()) return; String treeLine sc.nextLine().trim(); if (!sc.hasNextLine()) return; String from sc.nextLine().trim(); if (!sc.hasNextLine()) return; String to sc.nextLine().trim(); System.out.println(minJumps(treeLine, from, to)); } }Gopackage main import ( bufio fmt os strings ) func depth(pos int) int { // 完全二叉树用数组下标表示反复跳到父节点即可得到层数。 d : 0 for pos 0 { pos (pos - 1) / 2 d } return d } func main() { in : bufio.NewScanner(os.Stdin) lines : []string{} for in.Scan() { text : strings.TrimSpace(in.Text()) if text ! { lines append(lines, text) } } if len(lines) 3 { return } nodesRaw : strings.Split(lines[0], ,) index : map[string]int{} for i, node : range nodesRaw { // 题面按逗号给出层序数组这里去掉空白后建立节点到下标的映射。 value : strings.TrimSpace(node) if _, ok : index[value]; !ok { index[value] i } } a, okA : index[lines[1]] b, okB : index[lines[2]] if !okA || !okB { fmt.Println(-1) return } if lines[1] lines[2] { fmt.Println(0) return } da, db : depth(a), depth(b) originalDa, originalDb : da, db for da db { // 让更深的节点先上移保证两个候选节点处在同一层。 a (a - 1) / 2 da-- } for db da { b (b - 1) / 2 db-- } for a ! b { // 同步上移直到下标相同此时就是最近公共祖先。 a (a - 1) / 2 b (b - 1) / 2 } fmt.Println(originalDa originalDb - 2*depth(a)) }C#include stdio.h #include string.h #include ctype.h #define MAXN 1000005 #define MAXL 64 char nodes[MAXN][MAXL]; int depth_of(int pos) { // 完全二叉树用数组下标表示反复跳到父节点即可得到层数。 int depth 0; while (pos 0) { pos (pos - 1) / 2; depth; } return depth; } int find_node(int n, const char *target) { for (int i 0; i n; i) { if (strcmp(nodes[i], target) 0) return i; } return -1; } int main() { static char line[MAXN * 2]; char from[MAXL], to[MAXL]; if (!fgets(line, sizeof(line), stdin)) return 0; if (!fgets(from, sizeof(from), stdin)) return 0; if (!fgets(to, sizeof(to), stdin)) return 0; from[strcspn(from, \r\n)] \0; to[strcspn(to, \r\n)] \0; int n 0, len 0; for (int i 0; line[i]; i) { // 题面按逗号给出层序数组这里去掉空白后拆成节点值。 char ch line[i]; if (ch , || ch \n || ch \r) { nodes[n][len] \0; n; len 0; if (ch \n || ch \r) break; } else if (!isspace((unsigned char)ch) len 1 MAXL) { nodes[n][len] ch; } } if (len 0) { nodes[n][len] \0; n; } int a find_node(n, from); int b find_node(n, to); if (a -1 || b -1) { printf(-1\n); return 0; } if (strcmp(from, to) 0) { printf(0\n); return 0; } int da depth_of(a), db depth_of(b); int original_da da, original_db db; while (da db) { // 让更深的节点先上移保证两个候选节点处在同一层。 a (a - 1) / 2; da--; } while (db da) { b (b - 1) / 2; db--; } while (a ! b) { // 同步上移直到下标相同此时就是最近公共祖先。 a (a - 1) / 2; b (b - 1) / 2; } printf(%d\n, original_da original_db - 2 * depth_of(a)); return 0; }【华为od机试真题PythonJSJavaGo合集】【超值优惠】Py/JS/Java/Go合集【华为od机试真题Python】Python真题题库【华为od机试真题JavaScript】JavaScript真题题库【华为od机试真题JavaGo】JavaGo真题题库【华为od机试真题C】C真题题库【华为od机试真题C语言】C语言真题题库【华为od面试手撕代码题库】面试手撕代码题库【华为od机试面试交流群】【文章底部有二维码链接可扫码加交流群】华为OD机试:二本院校有机会吗?有机会,但不大,大神除外!机考分数越高越好,所以需要提前刷题。机考通过后,如果没有收到面试邀请,也不要着急,非目标院校面试邀请发的时间比较晚。非目标院校今年有点难,机试至少要考到350分,所以需要疯狂刷题,华为OD机考是有题库的,最好在考前完所有题库题目。华为OD机试:跨专业可以参加华为OD可以,但是如果你的本科院校比较差,上岸概率不大。华为OD机试:华为OD简历被锁定机试通过,性格测试也通过,但是没人联系面试,发现简历被锁定。此时需要主动去联系HR。让他帮助你查询原因。

相关新闻

RT-Thread快速入门(七)之互斥量

RT-Thread快速入门(七)之互斥量

前言 在上篇文章的信号量示例中,我们把信号量初始值设为 1,用做"二值信号量",也能实现互斥访问: 线程A take(信号量) → 使用资源 → release(信号量) 线程B take(信号量) → 阻塞等待 → …… → 被唤醒 但这有一个…

2026/7/13 15:01:23 阅读更多 →
硅胶包胶的难点在哪里:固转液复合工艺拆解

硅胶包胶的难点在哪里:固转液复合工艺拆解

“硅胶包胶"这个词在代工询价里出现频率很高,但很多人对它的理解就是"把硅胶包在别的东西外面”。实际上,硅胶包胶是LSR代工里技术难度偏高的一类工艺,难不在"包"这个动作本身,而在于让硅胶和基材真正粘在一起…

2026/7/13 14:57:13 阅读更多 →
三步解锁Wand专业版:终极免费增强工具让你的游戏修改体验更完美

三步解锁Wand专业版:终极免费增强工具让你的游戏修改体验更完美

三步解锁Wand专业版:终极免费增强工具让你的游戏修改体验更完美 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 还在为游戏修改工具Wan…

2026/7/13 14:57:13 阅读更多 →

最新新闻

革命性AI空气动力学工具XMeshGraphNet DrivAerML:NVIDIA如何用图神经网络加速汽车设计

革命性AI空气动力学工具XMeshGraphNet DrivAerML:NVIDIA如何用图神经网络加速汽车设计

革命性AI空气动力学工具XMeshGraphNet DrivAerML:NVIDIA如何用图神经网络加速汽车设计 【免费下载链接】xmgn_drivaerml_surface 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/xmgn_drivaerml_surface XMeshGraphNet-DrivAerML是一款由NVIDIA开发的…

2026/7/13 15:48:18 阅读更多 →
为什么92%的提示词工程师仍在用非结构化写法?——ChatGPT结构化提示词的5层嵌套模型与实时效果对比数据

为什么92%的提示词工程师仍在用非结构化写法?——ChatGPT结构化提示词的5层嵌套模型与实时效果对比数据

更多请点击: https://codechina.net 第一章:为什么92%的提示词工程师仍在用非结构化写法? 当提示工程从实验性实践演变为专业岗位,一个反直觉的现象持续存在:绝大多数从业者仍依赖自由文本式提示——即无字段约束、无…

2026/7/13 15:48:18 阅读更多 →
Gammazero/Deque社区贡献指南:如何参与这个高性能队列项目的开发

Gammazero/Deque社区贡献指南:如何参与这个高性能队列项目的开发

Gammazero/Deque社区贡献指南:如何参与这个高性能队列项目的开发 【免费下载链接】deque Fast ring-buffer deque (double-ended queue) 项目地址: https://gitcode.com/gh_mirrors/deque3/deque Gammazero/Deque是一个高性能的环形缓冲区双端队列实现&#…

2026/7/13 15:46:17 阅读更多 →
Swift Metrics部署指南:生产环境中的配置、调优和运维最佳实践

Swift Metrics部署指南:生产环境中的配置、调优和运维最佳实践

Swift Metrics部署指南:生产环境中的配置、调优和运维最佳实践 【免费下载链接】swift-metrics Metrics API for Swift 项目地址: https://gitcode.com/gh_mirrors/sw/swift-metrics Swift Metrics是Swift服务器生态系统中的核心监控API标准,为生…

2026/7/13 15:44:17 阅读更多 →
仅限本周开放|Claude长文档自动切片+语义锚点标注工具链(含Python脚本+JSON Schema模板)

仅限本周开放|Claude长文档自动切片+语义锚点标注工具链(含Python脚本+JSON Schema模板)

更多请点击: https://kaifayun.com 第一章:Claude长文档总结的核心挑战与认知重构 处理超长文档时,Claude模型面临三重结构性张力:上下文窗口的物理边界、语义连贯性的断裂风险,以及关键信息在冗余文本中的稀释效应。…

2026/7/13 15:44:17 阅读更多 →
Chatterbox TTS架构设计实战:企业级语音合成解决方案

Chatterbox TTS架构设计实战:企业级语音合成解决方案

Chatterbox TTS架构设计实战:企业级语音合成解决方案 【免费下载链接】chatterbox SoTA open-source TTS 项目地址: https://gitcode.com/GitHub_Trending/chatterbox7/chatterbox Chatterbox作为Resemble AI开发的开源State-of-the-Art(SoTA&…

2026/7/13 15:38:15 阅读更多 →

日新闻

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

2026/7/13 0:01:19 阅读更多 →
浦东旧模块回收哪家强?专业评测带你一探究竟

浦东旧模块回收哪家强?专业评测带你一探究竟

于科技迅猛飞速迭代的当下此刻, 旧模块的回收处置, 不但关联着资源的再度利用, 而且更牵扯到数据安全以及环保合规事宜。你是不是也正为那堆积得如同山峦般的旧模块而发愁? 是不是不清楚该怎样安全且高效地去处理它们? 别忧心烦恼, 就在今日, 我会以具备权威影响力的自媒体博…

2026/7/13 0:01:19 阅读更多 →
卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

1 研究背景与现存技术痛点(提出问题)基因工程、蛋白质组学、生物制药研发流程中,蛋白质分离纯化是决定下游实验成败的关键环节。当前实验室常规蛋白质分离纯化工艺存在三类难以标准化的技术瓶颈:传统离子交换、分子筛层析无特异性…

2026/7/13 0:05:20 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/13 4:38:36 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/13 4:38:38 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/13 4:38:40 阅读更多 →

月新闻