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

GO


題目名稱:二叉樹的廣度優先遍歷


  1. 知識點:字符串處理、遞歸/分治算法(構建二叉樹)、隊列操作(BFS)
  2. 時間限制:1秒
  3. 空間限制:256MB
  4. 限定語言:不限

題目描述

有一棵二叉樹,每個節點由一個大寫字母標識(最多26個節點)。現有兩組字母,分別表示后序遍歷(左孩子->右孩子->父節點)和中序遍歷(左孩子->父節點->右孩子)的結果,請輸出該二叉樹的層次遍歷結果。

輸入描述
輸入為兩個字符串,第一個字符串表示后序遍歷結果,第二個字符串表示中序遍歷結果。字符串僅包含大寫字母,且長度不超過26。

輸出描述
輸出二叉樹的層次遍歷結果,為一個連續字符串,無需分隔符。

示例
輸入:

CBEFDA CBAEDF

輸出:

ABDCEF

說明:
對應的二叉樹結構為:

    A  / \  B   D  /   / \  
C   E   F

層次遍歷順序為A→B→D→C→E→F。


Java

問題分析

題目要求根據后序和中序遍歷結果構建二叉樹,并輸出層次遍歷結果。關鍵在于如何正確分割后序和中序序列以遞歸構建樹。


解題思路

  1. 構建二叉樹
    • 后序的最后一個元素為根節點。
    • 在中序中找到根的位置,分割左、右子樹的中序序列。
    • 根據左子樹節點數,分割后序的左、右子樹部分。
  2. 層次遍歷:使用隊列實現廣度優先遍歷,按層輸出節點。

代碼實現

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 postOrder = scanner.next();String inOrder = scanner.next();char[] in = inOrder.toCharArray();char[] post = postOrder.toCharArray();TreeNode root = buildTree(in, post);String result = levelOrder(root);System.out.println(result);}// 構建二叉樹private static TreeNode buildTree(char[] in, char[] post) {return buildTreeHelper(in, 0, in.length - 1, post, 0, post.length - 1);}private static TreeNode buildTreeHelper(char[] in, int inStart, int inEnd, char[] post, int postStart, int postEnd) {if (inStart > inEnd || postStart > postEnd) return null;char rootVal = post[postEnd];TreeNode root = new TreeNode(rootVal);int rootPos = findRootPosition(in, inStart, inEnd, rootVal);int leftSize = rootPos - inStart;root.left = buildTreeHelper(in, inStart, rootPos - 1, post, postStart, postStart + leftSize - 1);root.right = buildTreeHelper(in, rootPos + 1, inEnd, post, postStart + leftSize, postEnd - 1);return root;}// 在中序數組中找到根的位置private static int findRootPosition(char[] in, int start, int end, char target) {for (int i = start; i <= end; i++) {if (in[i] == target) return i;}return -1;}// 層次遍歷private static String levelOrder(TreeNode root) {if (root == null) return "";Queue<TreeNode> queue = new LinkedList<>();StringBuilder sb = new StringBuilder();queue.offer(root);while (!queue.isEmpty()) {TreeNode node = queue.poll();sb.append(node.val);if (node.left != null) queue.offer(node.left);if (node.right != null) queue.offer(node.right);}return sb.toString();}
}

代碼詳解

  1. TreeNode類:定義二叉樹的節點結構。
  2. main方法:讀取輸入的后序和中序字符串,轉換為字符數組后構建樹,輸出層次遍歷結果。
  3. buildTree方法
    • 調用buildTreeHelper遞歸構建樹,參數為中序和后序數組的起始、結束索引。
    • 后序的最后一個元素為當前根節點。
    • 在中序數組中找到根的位置rootPos,計算左子樹節點數leftSize
    • 遞歸構建左子樹和右子樹,分割后序數組的左右部分。
  4. findRootPosition方法:遍歷中序數組,返回根的位置。
  5. levelOrder方法:使用隊列實現層次遍歷,按層輸出節點。

示例測試

  1. 輸入1

    CBEFDA CBAEDF  
    

    輸出

    ABDCEF  
    

    說明:構建的樹結構為A→B→D→C→E→F。

  2. 輸入2

    CEDBA CBEDA  
    

    輸出

    ABDCE  
    

    說明:構建的樹結構為A→B→D→C→E。

  3. 輸入3

    CBA CBA  
    

    輸出

    ABC  
    

    說明:構建的樹結構為A→B→C,層次遍歷順序為A→B→C。


綜合分析

  1. 時間復雜度

    • 構建樹:O(n^2),每次遞歸需遍歷中序數組查找根位置。
    • 層次遍歷:O(n),每個節點進出隊列一次。
  2. 空間復雜度

    • O(n),存儲遞歸調用棧和隊列。
  3. 正確性

    • 通過索引精確分割數組,確保樹的結構正確。
    • 層次遍歷隊列保證節點按層輸出。
  4. 優勢

    • 索引分割:避免字符串切割錯誤,提高精度。
    • 隊列遍歷:簡單高效實現層次遍歷。
  5. 適用性

    • 支持最多26個節點的輸入,滿足題目要求。

python

問題分析

題目要求根據后序和中序遍歷結果構建二叉樹,并輸出層次遍歷結果。關鍵在于如何正確分割后序和中序序列以遞歸構建樹,并通過廣度優先遍歷(BFS)輸出層次遍歷結果。


解題思路

  1. 構建二叉樹
    • 后序的最后一個元素為當前子樹的根節點。
    • 在中序中找到根的位置,分割左、右子樹的中序序列。
    • 根據左子樹節點數,分割后序的左、右子樹部分。
    • 遞歸構建左子樹和右子樹。
  2. 層次遍歷:使用隊列實現廣度優先遍歷(BFS),按層輸出節點。

代碼實現

class TreeNode:def __init__(self, val):self.val = valself.left = Noneself.right = Nonefrom collections import dequedef build_tree(in_order, post_order):# 創建哈希表快速查找根節點在中序的位置hash_map = {val: idx for idx, val in enumerate(in_order)}def helper(in_left, in_right, post_left, post_right):if post_left > post_right:return None# 后序的最后一個元素是當前根節點root_val = post_order[post_right]root = TreeNode(root_val)# 查找根節點在中序中的位置root_idx = hash_map[root_val]# 左子樹的節點個數left_size = root_idx - in_left# 遞歸構建左子樹root.left = helper(in_left, root_idx - 1, post_left, post_left + left_size - 1)# 遞歸構建右子樹root.right = helper(root_idx + 1, in_right, post_left + left_size, post_right - 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/907466.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907466.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907466.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[java八股文][JavaSpring面試篇]Mybatis

與傳統的JDBC相比&#xff0c;MyBatis的優點&#xff1f; 基于 SQL 語句編程&#xff0c;相當靈活&#xff0c;不會對應用程序或者數據庫的現有設計造成任 何影響&#xff0c;SQL 寫在 XML 里&#xff0c;解除 sql 與程序代碼的耦合&#xff0c;便于統一管理&#xff1b;提供 …

數據庫 | 時序數據庫選型

選型目標 高性能與低延遲&#xff1a;滿足高頻率數據寫入與即時查詢的需求。資源效率&#xff1a;優化存儲空間使用&#xff0c;減少計算資源消耗。可擴展架構&#xff1a;支持數據量增長帶來的擴展需求&#xff0c;易于維護。社區活躍度&#xff1a;有活躍的開發者社區&#…

MobaXterm連接Docker Desktop中的容器(shell)

對于使用docker desktop的同學&#xff0c;想要直連docker容器不需要借助ssh協議&#xff0c;可以直接通過shell訪問控制臺&#xff0c;配置如下&#xff1a; 選擇terminal shell類型&#xff0c;我選擇的是powershell 。 輸入terminal啟動命令&#xff1a;docker exec -it [你…

兩個Ubuntu機器(內網)免密登錄設置

業務背景&#xff1a;現有兩個機器&#xff1b;A&#xff08;192.168.1.10&#xff09;、B&#xff08;192.168.1.20&#xff09;&#xff1b; 需要機器A可以免密登錄B&#xff0c;具體操作如下&#xff1a; 1、首先在機器A中&#xff0c;上生成 SSH 密鑰對&#xff08;公鑰和私…

支持selenium的chrome driver更新到136.0.7103.113

最近chrome釋放新版本&#xff1a;136.0.7103.113 如果運行selenium自動化測試出現以下問題&#xff0c;是需要升級chromedriver才可以解決的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only s…

SQL中各個子句的執行順序

select、from、 join、where、order by、group by、having、limit 解釋 1) FROM (確定數據源) 查詢的執行首先從FROM子句開始&#xff0c;確定數據的來源(表、視圖、連接等)。 2) JOIN (如果有JOIN操作) 在FROM子句之后&#xff0c;SQL引擎會執行連接操作(JOIN)&#xff0c…

若依微服務的定制化服務

復制依賴 復制依賴 復制system服務的bootstrap.yml文件&#xff0c;修改port和name 在nacos復制一個新的nacos配置&#xff0c;修改對應的nacos的配置 &#xff0c;可能不需要修改&#xff0c;看情況。 網關修改 注意curd的事項&#xff0c;模塊名稱的修改

用 Python 模擬下雨效果

用 Python 模擬下雨效果 雨天別有一番浪漫情懷&#xff1a;淅淅瀝瀝的雨滴、濕潤的空氣、朦朧的光影……在屏幕上也能感受下雨的美妙。本文將帶你用一份簡單的 Python 腳本&#xff0c;手把手實現「下雨效果」動畫。文章深入淺出&#xff0c;零基礎也能快速上手&#xff0c;完…

純數據挖掘也能發Microbiome?

抗生素濫用導致多重耐藥微生物在全球蔓延&#xff0c;但新型抗生素的研發進展緩慢&#xff0c;亟需找到替代抗生素的新型防御策略。抗菌肽&#xff08;AMPs&#xff09;作為天然防御分子&#xff0c;具有低耐藥潛力和廣譜活性。德國小蠊&#xff08;Blattella germanica&#x…

動態內容加載時,爬蟲應如何處理?

處理動態內容加載是爬蟲開發中的一個常見挑戰。許多現代網站使用 JavaScript 動態加載內容&#xff0c;這意味著頁面的某些部分可能在初始加載時并不存在&#xff0c;而是通過后續的 AJAX 請求或 JavaScript 執行動態生成的。為了處理這種情況&#xff0c;爬蟲需要能夠模擬瀏覽…

uni-app 安卓消失的字符去哪里了?maxLength失效了!

前情提要 皮一下~這個標題我還蠻喜歡的嘿嘿嘿【附上一個自行思考的猥瑣的笑容】 前段時間不是在開發uni-app的一個小應用嘛,然后今天測試發現,有一個地方在蘋果是沒有問題的,但是在安卓上出現了問題,附上安卓的截圖 在這里我是有限制maxLength=50的,而且,賦值字符串到字…

2025年5月藍橋杯stema省賽真題——象棋移動

上方題目可點下方去處&#xff0c;支持在線編程&#xff5e; 象棋移動_scratch_少兒編程題庫學習中心-嗨信奧 程序演示可點下方&#xff0c;支持源碼和素材獲取&#xff5e; 象棋移動-scratch作品-少兒編程題庫學習中心-嗨信奧 題庫收集了歷屆各白名單賽事真題和權威機構考級…

Cesium 實戰 26 - 自定義紋理材質 - 實際應用之飛線(拋物線)

Cesium 實戰 26 - 自定義紋理材質 - 實際應用之飛線(拋物線) 前言核心代碼完整代碼在線示例前言 之前總結了項目實戰用常用的自定義紋理材質,包括擴散、預警、動態線等,后續還會不定期增加一些效果。 除了單個的自定義紋理材質介紹,文章系列后期會增加一些實際項目應用、…

Apache Airflow

目錄 Apache Airflow是什么 CVE-2020-11978(Airflow 示例dag中的命令注入) CVE-2020-11981(Airflow Celery消息中間件命令執行) CVE-2020-17526(Airflow 默認密鑰導致的權限繞過) Apache Airflow是什么 Airflow是一個以編程方式編寫&#xff0c;安排和監視工作流的平臺。 …

【Python Cookbook】迭代器與生成器(四)

目錄 案例 目錄 案例 迭代器與生成器&#xff08;一&#xff09;1.手動遍歷迭代器2.代理迭代3.使用生成器創建新的迭代模式4.實現迭代器協議迭代器與生成器&#xff08;三&#xff09;9.排列組合的迭代10.序列上索引值迭代11.同時迭代多個序列12.不同集合上元素的迭代迭代器與生…

React 播客專欄 Vol.16|useRef 和 useMemo 是干嘛的?

&#x1f44b; 歡迎回到《前端達人 React 播客書單》第 16 期&#xff08;正文內容為學習筆記摘要&#xff0c;音頻內容是詳細的解讀&#xff0c;方便你理解&#xff09;&#xff0c;請點擊下方收聽 視頻版 &#x1f399; 歡迎來到《前端達人 播客書單》第 16 期。 今天我們來…

漫談英偉達GPU架構進化史:從Celsius到Blackwell

在英偉達官網,我們可以清晰地看到其從1999年Celsius到2024年Blackwell的20+代架構演進。這一歷程猶如一部波瀾壯闊的科技史詩,見證了英偉達在GPU領域的卓越創新與持續引領。 NVIDIA GPU架構變遷路線: 年份 NV GPU架構變遷 2025 Blackwell 2.0 2024 Blackwell 2023-2024 Hopp…

車載通信網絡 --- CAN FD與CAN XL

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

DM達夢數據庫開啟SQL日志記錄功能

DM達夢數據庫開啟SQL日志記錄功能 配置SQL日志&#xff08;非必須的配置步驟&#xff0c;與主備集群配置無關&#xff0c;如果沒有需求可以跳過配置SQL日志&#xff09; sqllog.ini 配置文件用于SQL日志的配置&#xff0c;當且僅當 INI&#xff08;dm.ini&#xff09; 參數 SV…

【HW系列】—C2遠控服務器(webshell鏈接工具, metasploit、cobaltstrike)的漏洞特征流量特征

文章目錄 蟻劍、冰蝎、哥斯拉一、蟻劍&#xff08;AntSword&#xff09;流量特征二、冰蝎&#xff08;Behinder&#xff09;流量特征三、哥斯拉&#xff08;Godzilla&#xff09;流量特征 metasploit、cobaltstrike一、Metasploit流量特征二、CobaltStrike流量特征三、檢測與防…