網站首頁 編程語言 正文
Python3中二叉樹前序遍歷的迭代解決方案
A Binary Tree
二叉樹是分層數據結構,其中每個父節點最多有 2 個子節點。在今天的文章中,我們將討論一個在大量技術編碼面試中出現的重要主題。
問題陳述 : 鑒于 根
二叉樹,返回 其節點值的前序遍歷 . 提供迭代解決方案而不是遞歸解決方案。
解決方案:
預購遍歷 在二叉樹中按以下順序發生:
- 先訪問根
- 遍歷左子樹
- 遍歷右子樹
為了用迭代解決方案解決這個問題,我們必須實現 堆 數據結構。這是一種非線性數據結構,其中操作按 LIFO(后進先出)順序執行。我們回答的方法很簡單,如下所示:
- 我們將初始化兩個列表?IE?一個承載輸出,另一個充當我們的堆棧數據結構。堆棧將使用二叉樹的根值進行初始化。
- 然后,只要堆棧有值,我們就會在堆棧上執行一個 while 循環。在循環中,依次進行以下操作:
- 刪除(彈出)堆棧中最頂部的值(根節點)并將其附加到輸出列表
- 將彈出值的右孩子壓入堆棧
- 將彈出值的左孩子壓入堆棧
- 返回循環結束時的輸出列表
作為這個過程的結果,將首先訪問根值,然后訪問左子樹,最后訪問右子樹值。
需要注意的是,右孩子首先被推入堆棧,然后是左孩子。這是因為堆棧的 LIFO 特性。這樣做將允許我們先訪問左孩子,然后再訪問右孩子。
說話很便宜,給我看代碼:
# 二叉樹節點的定義 類樹節點: def __init__(self, val=0, left=None, right=None): 自我.val = val self.left = 左 self.right = 對 類解決方案: def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: 輸出,節點堆棧 = [],[根] 而節點堆棧: 節點 = nodestack.pop() if node: # preorder: root -> left -> right output.append(node.val) nodestack.append(node.right) nodestack.append(node.left) 返回輸出
如果這篇文章對您有幫助,請隨意喜歡并訂閱我的時事通訊,以獲取更多 Python 中的 DSA 內容。
原文鏈接:https://www.cnblogs.com/amboke/p/16660367.html
相關推薦
- 2022-05-04 EF使用數據注解特性創建表結構_實用技巧
- 2022-09-15 git驗證線上的版本是否符合預期_相關技巧
- 2022-03-28 Android實現調取支付寶健康碼_Android
- 2022-11-02 Pytest運行及其控制臺輸出信息_python
- 2022-08-22 C++動態規劃算法實現矩陣鏈乘法_C 語言
- 2022-05-20 Spring注入bean的常用的六種方式
- 2022-06-19 詳解.Net中字符串不變性與相等判斷的特殊場景_實用技巧
- 2022-07-12 mongoDB替換replace某個字段的部分內容
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支