解決Python3中二叉樹前序遍歷的迭代問題
Python3中二叉樹前序遍歷的迭代解決方案

A Binary Tree
二叉樹是分層數(shù)據(jù)結(jié)構(gòu),其中每個父節(jié)點最多有 2 個子節(jié)點。在今天的文章中,我們將討論一個在大量技術(shù)編碼面試中出現(xiàn)的重要主題。
問題陳述 : 鑒于 根 二叉樹,返回 其節(jié)點值的前序遍歷 . 提供迭代解決方案而不是遞歸解決方案。
解決方案:
預購遍歷 在二叉樹中按以下順序發(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)容。
到此這篇關(guān)于Python3中二叉樹前序遍歷的迭代解決方案的文章就介紹到這了,更多相關(guān)Python二叉樹遍歷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何用scheduler實現(xiàn)learning-rate學習率動態(tài)變化
這篇文章主要介紹了如何用scheduler實現(xiàn)learning-rate學習率動態(tài)變化問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
深入講解Python函數(shù)中參數(shù)的使用及默認參數(shù)的陷阱
這篇文章主要介紹了Python函數(shù)中參數(shù)的使用及默認參數(shù)的陷阱,文中將函數(shù)的參數(shù)分為必選參數(shù)、默認參數(shù)、可變參數(shù)和關(guān)鍵字參數(shù)來講,要的朋友可以參考下2016-03-03
如何使用Python的Requests包實現(xiàn)模擬登陸
這篇文章主要為大家詳細介紹了使用Python的Requests包模擬登陸,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04
在python3.64中安裝pyinstaller庫的方法步驟
這篇文章主要介紹了在python3.64中安裝pyinstaller庫的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06

