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

华为OD机试真题——传递悄悄话(二叉树最长路径问题)(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

在这里插入图片描述

2025 A卷 200分 题型

本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式;
并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析;
本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分享》

华为OD机试真题《传递悄悄话(二叉树最长路径问题)》:


文章快捷目录

题目描述及说明

Java

python

JavaScript

C++

C

GO


题目名称:传递悄悄话(二叉树最长路径问题)


  1. 知识点:二叉树、DFS/BFS、路径和计算
  2. 时间限制:1秒
  3. 空间限制:256MB
  4. 限定语言:不限

题目描述

给定一个二叉树,每个节点上站一个人,节点数字表示父节点到该节点传递悄悄话需要的时间。初始时,根节点的人有一个悄悄话要传递给其他人。计算所有节点都接收到悄悄话的最长时间(即从根节点到最远叶子节点的路径时间和)。

输入描述
一行整数序列,表示二叉树的层序遍历结果,-1表示空节点。例如:
0 9 20 -1 -1 15 7 -1 -1 -1 -1 3 2

输出描述
一个整数,表示所有节点接收悄悄话的最长时间。例如输入上述序列,输出38(路径0→20→7→3→2的时间总和)。

示例说明

  • 输入0 -1 10 -1 -1,输出10(路径0→10)。
  • 输入0 3 4 -1 -1 -1 -1,输出4(路径0→4)。

Java

问题分析

题目要求计算二叉树中从根到最远叶子节点的路径时间和。每个节点的值表示父节点到该节点的传递时间,要求找到所有节点接收悄悄话的最长时间。

解题思路

  1. 构建二叉树:根据输入的层序遍历数组构建二叉树结构,其中 -1 表示空节点。
  2. 深度优先搜索 (DFS):遍历所有从根到叶子的路径,计算路径时间和的最大值。路径和为路径上所有节点值的总和(包括根节点)。

代码实现

import java.util.*;class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }
}public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String line = sc.nextLine();Integer[] nums = parseInput(line);TreeNode root = buildTree(nums);int max = dfs(root, 0); // 计算路径和(包含根节点)System.out.println(max);}// 将输入字符串解析为 Integer 数组(处理 -1)private static Integer[] parseInput(String line) {String[] parts = line.split(" ");Integer[] nums = new Integer[parts.length];for (int i = 0; i < parts.length; i++) {if (parts[i].equals("-1")) {nums[i] = null;} else {nums[i] = Integer.parseInt(parts[i]);}}return nums;}// 构建层序二叉树private static TreeNode buildTree(Integer[] nums) {if (nums == null || nums.length == 0 || nums[0] == null) return null;TreeNode root = new TreeNode(nums[0]);Queue<TreeNode> queue = new LinkedList<>();queue.add(root);int i = 1;while (!queue.isEmpty() && i < nums.length) {TreeNode node = queue.poll();// 处理左子节点if (i < nums.length && nums[i] != null) {node.left = new TreeNode(nums[i]);queue.add(node.left);}i++;// 处理右子节点if (i < nums.length && nums[i] != null) {node.right = new TreeNode(nums[i]);queue.add(node.right);}i++;}return root;}// DFS 计算从根到叶子的最大路径和private static int dfs(TreeNode node, int currentSum) {if (node == null) return currentSum; // 空节点返回当前和currentSum += node.val; // 累加当前节点值if (node.left == null && node.right == null) {return currentSum; // 叶子节点返回总和}int leftSum = dfs(node.left, currentSum);int rightSum = dfs(node.right, currentSum);return Math.max(leftSum, rightSum);}
}

代码解析

  1. 输入处理
    • parseInput 将输入字符串转换为 Integer 数组,-1 转为 null
  2. 构建二叉树
    • 使用队列按层序处理每个节点的左右子节点,null 表示空节点。
  3. DFS 计算路径和
    • 递归遍历所有路径,累加节点值,叶子节点返回路径和,非叶子节点返回左右子树的最大路径和。

示例测试

  1. 示例输入

    0 9 20 -1 -1 15 7 -1 -1 -1 -1 3 2
    

    输出40
    解释:路径 0 → 20 → 15 → 3 → 2 的和为 0 + 20 + 15 + 3 + 2 = 40

  2. 测试用例1
    输入

    0 -1 10 -1 -1
    

    输出10
    解释:路径 0 → 10 的和为 0 + 10 = 10

  3. 测试用例2
    输入

    0 3 4 -1 -1 -1 -1
    

    输出4
    解释:路径 0 → 4 的和为 0 + 4 = 4

综合分析

  1. 时间复杂度:O(n)
    • 构建二叉树和 DFS 遍历各需一次线性遍历。
  2. 空间复杂度:O(n)
    • 存储二叉树和递归栈空间。
  3. 正确性保证
    • DFS 确保遍历所有路径,取最大值逻辑正确。
  4. 适用性
    • 适用于题目约束(n ≤ 20000,节点值 ≤ 10000),能处理大规模输入。

python

问题分析

题目要求计算从二叉树根节点到最远叶子节点的路径时间和的最大值。每个节点的值表示父节点到该节点的传递时间。例如,路径根节点→A→B的时间总和为父节点到A的时间加上A到B的时间。

解题思路

  1. 构建二叉树:根据输入的层序遍历数组构建二叉树,其中 -1 表示空节点。
  2. 深度优先搜索 (DFS):递归计算所有从根到叶子的路径时间和,取最大值。路径和为路径节点的值之和。

代码实现

class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef build_tree(level_order):"""根据层序遍历数组构建二叉树:param level_order: 层序数组,-1转换为None:return: 根节点"""if not level_order or level_order[0] is None:return Noneroot 

相关文章:

  • 深入研究Azure 容器网络接口 (CNI) overlay
  • 战略3.1 - 战略选择(发展战略-一体/密集/多元化)
  • 深度解析 8086 处理器:x86 架构的奠基者
  • RabbitMQ 核心原理与Spring Boot整合实战
  • 华为云Flexus+DeepSeek征文 | DeepSeek-V3/R1商用服务开通体验全流程及使用评测
  • 【Linux 学习计划】-- 进程概念与本质 | pid ppid | 进程创建与多进程(fork)
  • 黑龙江云前沿-服务器托管
  • 网络原理 | TCP与UDP协议的区别以及回显服务器的实现
  • 【邀请】点击邀请链接参加阿里云训练营活动,完成学习送礼品+鼠标垫+usb拓展坞,一个小时完成
  • Linux输出命令——echo解析
  • GitHub Page填写域名显示被占用
  • [服务器初体验] SSH登录成功后,我的新Linux服务器“空空如也”?三件必做的事让它安全又顺手
  • Go语言开发的GMQT物联网MQTT消息服务器(mqtt Broker)支持海量MQTT连接和快速低延时消息传输-提供源码可二次开发定制需求
  • 中小企业AI算力如何选?【显卡租赁】VS【自建服务器】
  • [运维][服务器][lightsail] Nginx反向代理实现端口映射:将80端口转发至本地5000端口
  • C++ 图像处理库 CxImage 简介 (迁移至OpenCV)
  • 【自然语言处理与大模型】大模型Agent四大的组件
  • 鸿蒙OSUniApp 实现带有滑动删除的列表#三方框架 #Uniapp
  • 系统架构中的限流实践:构建多层防护体系(二)
  • react基础知识(下)
  • 杭州推广公司企业/百家号关键词seo优化
  • 成都政务网站建设/西安网站到首页排名
  • 做英文版网站/百度推广费用多少
  • 政府网站建设安全管理/seo技术大师
  • 企业门户网站管理办法/今天特大新闻最新消息
  • 阿里云一键建站网站/互联网全媒体广告代理