在这里插入图片描述

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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/82326.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/82326.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/82326.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「读书报告」Spark实时大数据分析

这本书是清华大学出版社2018年出版的&#xff0c;我是2020年读的&#xff0c;说真的的&#xff0c;不怎么喜欢这本书&#xff0c;所以作者我都不想提。有的人可能会奇怪&#xff0c;ailx10&#xff0c;你一个搞网络安全的&#xff0c;怎么会去读大数据相关的书&#xff0c;哎&a…

2025 河北ICPC( D. 金泰园(二分)-- C.年少的誓约(公式转化))

文章目录 2025 河北ICPCD. 金泰园&#xff08;二分&#xff09;C.年少的誓约(公式转化)总结 2025 河北ICPC 题目链接&#xff1a; Attachments - The 9th Hebei Collegiate Programming Contest - Codeforces sdccpc20250522 - Virtual Judge 赛时&#xff1a;5道 D. 金泰…

QT学习一

对于选择qmake还是cmake&#xff0c;现在写的暂时先用qmake 1.命名规范和快捷键 2.按钮控件常用API //创建第一个按钮QPushButton * btn new QPushButton;//让btn对象 依赖在mywidget窗口中btn->setParent(this);//显示文本btn->setText("第一个按钮");//创建…

【Elasticsearch】给所索引创建多个别名

Elasticsearch 是可以给索引创建多个别名的。 为什么可以创建多个别名 1. 灵活性 - 别名可以为索引提供一个更易于理解的名称&#xff0c;方便用户根据不同的业务场景或用途来引用同一个索引。例如&#xff0c;一个索引可能同时服务于多个不同的应用程序或服务&#xff0c;通…

使用 OpenCV 实现哈哈镜效果

在计算机视觉和图像处理领域&#xff0c;OpenCV 提供了非常强大的图像几何变换能力&#xff0c;不仅可以用于纠正图像&#xff0c;还能制造各种“有趣”的视觉效果。今天&#xff0c;我们就来实现一个经典的“哈哈镜”效果&#xff0c;让图像像在游乐园里一样被拉伸、压缩、扭曲…

AI|Java开发 IntelliJ IDEA中接入本地部署的deepseek方法

目录 连接本地部署的deepseek&#xff1a; IntelliJ IDEA中使用deepseek等AI&#xff1a; 用法一&#xff1a;让AI写代码 用法二&#xff1a;选中这段代码&#xff0c;右键&#xff0c;可以让其解释这段代码的含义。这时显示的解释是英文的。 连接本地部署的deepseek&#…

如何使用两块硬盘作为 Ubuntu24 的系统盘,实现坏掉一块不影响系统运行。

最近我想使用Ubuntu组一个NAS系统&#xff0c;想实现系统盘冗余&#xff0c;各位大佬可以给点建议吗。 Deep Seek 为了实现两块硬盘作为 Ubuntu 24 系统盘的冗余配置&#xff08;RAID 1&#xff09;&#xff0c;确保一块硬盘损坏时系统仍可运行&#xff0c;以下是详细步骤&am…

【2025最新】虚拟机安装macos,VMware在Windows11上安装macOS 15完整图文教程 - 新手也能轻松上手

引言 想体验苹果系统但不想买Mac电脑&#xff1f;别担心&#xff01;本教程将手把手教你如何在Windows11环境下&#xff0c;通过VMware虚拟机安装macOS Sequoia15系统。即使你是零基础小白&#xff0c;按照这个步骤操作&#xff0c;也能轻松搞定&#xff01; 准备工作 在开始…

论文阅读笔记——Emerging Properties in Unified Multimodal Pretraining

BAGEL 论文 商业闭源系统与学术/开源模型的差距很大&#xff0c;BAGEL 旨在通过开源统一架构大规模交错数据主要解决&#xff1a; 架构割裂&#xff1a;理解/生成分属两条网络&#xff0c;信息被压缩在少量条件 token 中&#xff0c;长上下文推理受限。数据贫乏&#xff1a;主…

Go 语言基础1 Slice,map,string

更多个人笔记见&#xff1a; github个人笔记仓库 gitee 个人笔记仓库 个人学习&#xff0c;学习过程中还会不断补充&#xff5e; &#xff08;后续会更新在github上&#xff09; 文章目录 stirng 字符串区分 rune&#xff0c;byte&#xff0c;string字符串操作strings 库相关 f…

C# AI(Trae工具+claude3.5-sonnet) 写前后端

这是一个AI 写的前后端分离项目,通过AI编程&#xff0c;开发电商管理系统&#xff08;登陆、注册&#xff09; 使用的AI工具为 Trae工具(字节国际版)claude3.5-sonnet(目前代码最强模型) 前端为 vue3Bootstrap 后端为 C# net5.0(因为我电脑里面已经安装了这个新版更好) do…

10G/25G PCS only mode for CoaXPress Over Fiber

背景 在CoaXPress Over Fiber的需求中, 需要利用XGMII的PCS 实现25G 数据速率的稳定传输&#xff0c;也就是不需要其MAC层&#xff0c;只保留PMA PCS层&#xff0c;借用其物理端口 线缆&#xff0c;实现其它协议的数据传输。 25G PCS 25GMII 的 TX/RX 时钟频率在 DDR&#xff…

掌握聚合函数:COUNT,MAX,MIN,SUM,AVG,GROUP BY和HAVING子句的用法,Where和HAVING的区别

对于Java后端开发来说&#xff0c;必须要掌握常用的聚合函数&#xff1a;COUNT&#xff0c;MAX&#xff0c;MIN&#xff0c;SUM&#xff0c;AVG&#xff0c;掌握GROUP BY和HAVING子句的用法&#xff0c;掌握Where和HAVING的区别&#xff1a; ✅ 一、常用聚合函数&#xff08;聚…

无人机飞行间隔安全智能评估、安全风险评估

无人机空中安全飞行评估需结合改进碰撞模型、蒙特卡洛仿真、安全间隔反推及动态避障策略&#xff0c;通过多机型分类与实时数据融合&#xff0c;实现从理论建模到实际部署的全流程管控&#xff0c;为城市低空密集飞行提供安全保障。 需求 无人机飞行间隔安全智能评估 无人机…

pdf图片导出(Visio和Origin)

一、Visio 导入pdf格式图片 1. 设计->大小&#xff0c;适应绘图。 2. 文件->导出&#xff0c;导出为pdf格式。 上面两部即可得到只包含图的部分的pdf格式。 如果出现的有默认白边&#xff0c;可以通过以下方式设置&#xff1a; 1. 文件->选项->自定义功能区->…

实现一个带有授权码和使用时间限制的Spring Boot项目

生成和验证授权码记录授权时间和过期时间实现授权逻辑 以下是具体的实现方法&#xff1a; 1. 生成和验证授权码 可以使用加密技术生成和验证授权码。授权码中可以包含有效期等信息&#xff0c;并使用密钥进行签名。 示例代码&#xff1a; java复制代码 import javax.crypt…

官方SDK停更后的选择:开源维护的Bugly Unity SDK

腾讯Bugly&#xff0c;为移动开发者提供专业的异常上报和运营统计&#xff0c;帮助开发者快速发现并解决异常&#xff0c;同时掌握产品运营动态&#xff0c;及时跟进用户反馈。 但是&#xff0c;免费版的Unity SDK已经很久不更新了&#xff0c;会有一些问题和特性缺失&#xff…

Spring Boot分页查询进阶:整合Spring Data REST实现高效数据导航

目录&#xff1a; 引言分页查询基础回顾 2.1 Spring Data JPA分页接口 2.2 Pageable与Page的使用 2.3 常见分页参数设计Spring Data REST简介 3.1 HATEOAS与超媒体驱动API 3.2 Spring Data REST核心功能 3.3 自动暴露Repository接口整合Spring Boot与Spring Data REST 4.1 项目…

[Datagear] [SQL]实现分组统计同时带汇总行的两种方式对比分析

在进行数据可视化开发时,我们经常会遇到用户提出的需求:除了展示按某字段分组统计的数据外,还希望看到一个“整体总计”的数据行。这种汇总行在报表、图表展示中极为常见,可以帮助用户快速理解全局数据水平。 实现这一功能的方法主要有两种:一种是使用 SQL 的 GROUP BY ..…

Docker常用命令介绍

Docker常用命令 1、本地镜像管理 save 命令 将一个或多个 Docker 镜像保存到一个 tar 归档文件中&#xff0c;以便在其他环境中分发或备份。 # 语法&#xff1a;docker save [OPTIONS] IMAGE [IMAGE...]# 保存单个镜像到文件 docker save -o myimage.tar myimage:latest# 保…