華為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 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處: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# 保…