426、N叉樹的層序遍歷

? ?

  1. 輸入檢查
    if not root:return []
    • 如果根節點為空,直接返回空列表
  2. 初始化

    result = []
    queue = collections.deque([root])
    • result用于存儲最終結果
    • queue初始化包含根節點,使用雙端隊列實現
  3. 主循環

    while queue:level_size = len(queue)level = []
    • 當隊列不為空時繼續處理
    • level_size記錄當前層的節點數量
    • level用于存儲當前層的節點值
  4. 處理當前層

    for _ in range(level_size):node = queue.popleft()level.append(node.val)
    • 處理當前層的每個節點
    • 從隊列左側取出節點
    • 將節點值加入當前層列表
  5. 處理子節點

    for child in node.children:queue.append(child)
    • 將當前節點的所有子節點加入隊列(下一層)
  6. 存儲當前層結果

    result.append(level)

    • 將當前層的值列表加入最終結果
  7. 返回結果

    return result

    • 返回層次遍歷結果

具體例子

考慮以下N叉樹:


節點結構

  • 節點1:值=1,children=[3,2,4]
  • 節點3:值=3,children=[5,6]
  • 節點2:值=2,children=[]
  • 節點4:值=4,children=[]
  • 節點5:值=5,children=[]
  • 節點6:值=6,children=[]

代碼執行步驟

  1. 初始化:

    • result = []
    • queue = [1]?(根節點)
  2. 第一輪循環:

    • level_size = 1 (隊列中只有節點1)
    • level = []
    • 取出節點1,level = [1]
    • 將節點1的子節點(3,2,4)加入隊列: queue = [3,2,4]
    • result =[ [1] ]
  3. 第二輪循環:

    • level_size = 3 (隊列中有3,2,4)
    • level = []
    • 取出節點3,level = [3]
    • 將節點3的子節點(5,6)加入隊列: queue = [2,4,5,6]
    • 取出節點2,level = [3,2]
    • 節點2沒有子節點
    • 取出節點4,level = [3,2,4]
    • 節點4沒有子節點
    • queue = [5,6]
    • result = [[1], [3,2,4]]
  4. 第三輪循環:

    • level_size = 2 (隊列中有5,6)
    • level = []
    • 取出節點5,level = [5]
    • 節點5沒有子節點
    • 取出節點6,level = [5,6]
    • 節點6沒有子節點
    • queue = []
    • result = [[1], [3,2,4], [5,6]]
  5. 循環結束:

    • 隊列為空,退出循環
    • 返回最終結果: [[1], [3,2,4], [5,6]]

最終輸出

這個層次遍歷的輸出結果是:

 

[ [1], [3,2,4], [5,6] ]

這個結果表示:

  • 第一層(根層): 只有節點1
  • 第二層: 節點3,2,4
  • 第三層: 節點5,6
  1. 初始狀態
    • queue?=?[1]
    • result?=?[]
  2. 第一層處理

    • level_size?=?1
    • 處理節點1:
      • level?=?[1]
      • 加入子節點3,2,4?→?queue?=?[3,2,4]
    • result?=[ [1] ]
  3. 第二層處理

    • level_size?=?3
    • 處理節點3:
      • level?=?[3]
      • 加入子節點5,6?→?queue?=?[2,4,5,6]
    • 處理節點2:
      • level?=?[3,2]
      • 無子節點?→?queue?=?[4,5,6]
    • 處理節點4:
      • level?=

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

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

相關文章

【ES】Elasticsearch字段映射沖突問題分析與解決

在使用Elasticsearch作為搜索引擎時,經常會遇到一些映射(Mapping)相關的問題。本文將深入分析字段映射沖突問題,并通過原生的Elasticsearch API請求來復現和解決這個問題。 問題描述 在實際項目中,我們遇到以下錯誤: Transport…

小紅書怎么看自己ip地址?小紅書更改ip地址教學

在社交媒體高度透明的今天,小紅書等平臺公開用戶IP屬地的功能引發了廣泛討論。無論是出于隱私保護的擔憂,還是因需要切換屬地,許多用戶都迫切想知道:能否通過手動修改“偽裝”所在地? 事實上,IP屬地可能影…

深入理解 Java 觀察者模式:原理、實現與應用

在軟件開發領域,設計模式堪稱開發者智慧的凝練結晶,它們為解決各類常見編程難題提供了行之有效的方案。觀察者模式(Observer Pattern)作為行為型設計模式的重要一員,在處理對象間依賴關系與事件通知方面表現卓越。本文…

網絡原理 TCP/IP

1.應用層 1.1自定義協議 客戶端和服務器之間往往進行交互的是“結構化”數據,網絡傳輸的數據是“字符串”“二進制bit流”,約定協議的過程就是把結構化”數據轉成“字符串”或“二進制bit流”的過程. 序列化:把結構化”數據轉成“字符串”…

2025年5月HCIP題庫(帶解析)

某個ACL規則如下:則下列哪些IP地址可以被permit規則匹配: rule 5 permit ip source 10.0.2.0 0.0.254.255 A、10.0.4.5 B、10.0.5.6 C、10.0.6.7 D、10.0.2.1 試題答案:A;C;D 試題解析: 10.0.2.000001010.00000000.00000010.0000000…

【Redis | 基礎總結篇 】

目錄 前言: 1.Redis的介紹: 2.Redis的類型與命令: 3.Redis的安裝: 3.1.Windows版本 3.2.Linux版本 4.在java中使用Redis: 4.1.介紹 4.2.Jedis 4.3.Spring Data Redis 前言: 本篇主要講述了Redis的…

38.前端代碼拆分

因為前端代碼之前是一體編寫的,所以為了方便對代碼進行了拆分 之前是這樣的: 為了更加規范,所以拆分成vue、util、store、api等部分: css: store: 拆分后的大致界面為: 其實還有點別扭需要后續再調整

tinyrenderer筆記(Shader)

tinyrenderer個人代碼倉庫:tinyrenderer個人練習代碼 前言 現在我們將所有的渲染代碼都放在了 main.cpp 中,然而在 OpenGL 渲染管線中,渲染的核心邏輯是位于 shader 中的,下面是 OpenGL 的渲染管線: 藍色是我們可以自…

C++高性能內存池

目錄 1. 項目介紹 1. 這個項目做的是什么? 2. 該項目要求的知識儲備 2. 什么是內存池 1. 池化技術 2. 內存池 3. 內存池主要解決的問題 4.malloc 3. 先設計一個定長的內存池 4.高并發內存池 -- 整體框架設計 5. 高并發內存池 -- thread cache 6. 高并發內存池 -- …

LintCode407-加一,LintCode第479題-數組第二大數

第407題: 描述 給定一個非負數,表示一個數字數組,在該數的基礎上1,返回一個新的數組。 該數字按照數位高低進行排列,最高位的數在列表的最前面. 樣例 1: 輸入:[1,2,3] 輸出:[1,2,4] 樣例 …

SMT貼片鋼網精密設計與制造要點解析

內容概要 SMT貼片鋼網作為電子組裝工藝的核心載體,其設計與制造質量直接影響焊膏印刷精度及產品良率。本文系統梳理了鋼網全生命周期中的15項關鍵技術指標,從材料選擇、結構設計到工藝控制構建完整技術框架。核心要點涵蓋激光切割精度的微米級調控、開口…

OpenCV進階操作:角點檢測

文章目錄 一、角點檢測1、定義2、檢測流程1)輸入圖像2)圖像預處理3)特征提取4)角點檢測5)角點定位和標記6)角點篩選或后處理(可選)7)輸出結果 二、Harris 角點檢測&#…

江蘇正力新能Verify認知能力測評筆試已通知 | SHL測評題庫預測題 | 華東同舟求職講求職

江蘇正力新能入職筆試通知,Verify(認知能力測評),用時約46分鐘,其中正式測試部分計時36分鐘;時間到了試卷會自動提交,請合理安排答題時間!前面有10分鐘練習時間,可以略過…

在若依里創建新菜單

首先打開左側菜單欄的系統管理,然后點擊菜單管理 可以點擊左上角的新增,也可以點擊右側對應目錄的新增 這里我選擇了右側的新增,即在系統管理目錄下新增菜單 其中的組件路徑就是寫好的頁面的路徑 (從views的下一級開始寫即可&…

【AI知識庫云研發部署】RAGFlow + DeepSeek

可以分成兩臺機器部署,一臺gpu,一臺cpu,cpu的機器運行ragflow的主程序,使用模型時才訪問gpu。當然全部在一臺機器上部署是完全ok的。全文沒有復雜的環境問題 gpu 安裝screen:yum install screen 配置ollama: 下載官方安裝腳本并執行: curl -fsSL https://ollama.co…

Java后端開發day40--異常File

(以下內容全部來自上述課程) 異常 異常:異常就是代表程序出現的問題 1. 異常的分類 1.1 Error 代表的是系統級別的錯誤(屬于嚴重問題) 系統一旦出現問題,sun公司會把這些錯誤封裝成Error對象。 Error…

算法思想之深度優先搜索(DFS)、遞歸以及案例(最多能得到多少克黃金、精準核酸檢測、最富裕的小家庭)

深度優先搜索(DFS)、遞歸 深度優先搜索(Depth First Search,DFS)是一種用于遍歷或搜索樹或圖的算法。在 DFS 算法中,從起始節點開始,沿著一條路徑盡可能深地訪問節點,直到到達葉子節…

Spark,HDFS客戶端操作

hadoop客戶端環境準備 找到資料包路徑下的Windows依賴文件夾,拷貝hadoop-3.1.0到非中文路徑(比如d:\hadoop-3.1.0) ① 打開環境變量 ② 在下方系統變量中新建HADOOP_HOME環境變量,值就是保存hadoop的目錄。 效果如下: ③ 配置Pa…

共享會議室|物聯網解決方案:打造高效、智能的會議空間!

在數字化轉型的浪潮下,企業、園區、公共機構的會議室面臨諸多痛點,如何通過物聯網技術實現會議室資源的智能調度、環境設備的自動化控制以及用戶體驗的全面升級?本文將結合行業實踐與技術方案,探討基于物聯網的共享會議室解決方案…

ts bug 找不到模塊或相應類型的聲明,@符有紅色波浪線

解決方法&#xff1a;在env.d.ts文件中添加以下代碼&#xff0c;這段代碼是一個 TypeScript 的聲明文件&#xff0c;用于讓 TypeScript 知道如何處理 Vue 單文件組件&#xff08;.vue 文件&#xff09;的導入。 /// <reference types"vite/client" /> // 聲明…