網(wǎng)站首頁 編程語言 正文
Python3中二叉樹前序遍歷的迭代解決方案
A Binary Tree
二叉樹是分層數(shù)據(jù)結(jié)構(gòu),其中每個父節(jié)點最多有 2 個子節(jié)點。在今天的文章中,我們將討論一個在大量技術(shù)編碼面試中出現(xiàn)的重要主題。
問題陳述 : 鑒于 根
二叉樹,返回 其節(jié)點值的前序遍歷 . 提供迭代解決方案而不是遞歸解決方案。
解決方案:
預(yù)購遍歷 在二叉樹中按以下順序發(fā)生:
- 先訪問根
- 遍歷左子樹
- 遍歷右子樹
為了用迭代解決方案解決這個問題,我們必須實現(xiàn) 堆 數(shù)據(jù)結(jié)構(gòu)。這是一種非線性數(shù)據(jù)結(jié)構(gòu),其中操作按 LIFO(后進先出)順序執(zhí)行。我們回答的方法很簡單,如下所示:
- 我們將初始化兩個列表?IE?一個承載輸出,另一個充當我們的堆棧數(shù)據(jù)結(jié)構(gòu)。堆棧將使用二叉樹的根值進行初始化。
- 然后,只要堆棧有值,我們就會在堆棧上執(zhí)行一個 while 循環(huán)。在循環(huán)中,依次進行以下操作:
- 刪除(彈出)堆棧中最頂部的值(根節(jié)點)并將其附加到輸出列表
- 將彈出值的右孩子壓入堆棧
- 將彈出值的左孩子壓入堆棧
- 返回循環(huán)結(jié)束時的輸出列表
作為這個過程的結(jié)果,將首先訪問根值,然后訪問左子樹,最后訪問右子樹值。
需要注意的是,右孩子首先被推入堆棧,然后是左孩子。這是因為堆棧的 LIFO 特性。這樣做將允許我們先訪問左孩子,然后再訪問右孩子。
說話很便宜,給我看代碼:
# 二叉樹節(jié)點的定義 類樹節(jié)點: def __init__(self, val=0, left=None, right=None): 自我.val = val self.left = 左 self.right = 對 類解決方案: def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: 輸出,節(jié)點堆棧 = [],[根] 而節(jié)點堆棧: 節(jié)點 = nodestack.pop() if node: # preorder: root -> left -> right output.append(node.val) nodestack.append(node.right) nodestack.append(node.left) 返回輸出
如果這篇文章對您有幫助,請隨意喜歡并訂閱我的時事通訊,以獲取更多 Python 中的 DSA 內(nèi)容。
原文鏈接:https://www.cnblogs.com/amboke/p/16660367.html
相關(guān)推薦
- 2022-07-29 Linux文件管理方法介紹_linux shell
- 2022-08-21 nginx代理實現(xiàn)靜態(tài)資源訪問的示例代碼_nginx
- 2022-03-15 redis編譯報致命錯誤:jemalloc/jemalloc.h:沒有那個文件或目錄
- 2022-10-18 C++函數(shù)模板與重載解析超詳細講解_C 語言
- 2022-06-30 PyTorch實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)的搭建詳解_python
- 2022-06-14 jquery實現(xiàn)點擊按鈕顯示與隱藏效果_jquery
- 2023-01-17 Python無權(quán)點文件轉(zhuǎn)化成鄰接矩陣方式_python
- 2024-01-09 bigdecimal保留兩位小數(shù)
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支