解決Python3中二叉樹(shù)前序遍歷的迭代問(wèn)題
Python3中二叉樹(shù)前序遍歷的迭代解決方案
A Binary Tree
二叉樹(shù)是分層數(shù)據(jù)結(jié)構(gòu),其中每個(gè)父節(jié)點(diǎn)最多有 2 個(gè)子節(jié)點(diǎn)。在今天的文章中,我們將討論一個(gè)在大量技術(shù)編碼面試中出現(xiàn)的重要主題。
問(wèn)題陳述 : 鑒于 根
二叉樹(shù),返回 其節(jié)點(diǎn)值的前序遍歷 . 提供迭代解決方案而不是遞歸解決方案。
解決方案:
預(yù)購(gòu)遍歷 在二叉樹(shù)中按以下順序發(fā)生:
- 先訪問(wèn)根
- 遍歷左子樹(shù)
- 遍歷右子樹(shù)
為了用迭代解決方案解決這個(gè)問(wèn)題,我們必須實(shí)現(xiàn) 堆 數(shù)據(jù)結(jié)構(gòu)。這是一種非線性數(shù)據(jù)結(jié)構(gòu),其中操作按 LIFO(后進(jìn)先出)順序執(zhí)行。我們回答的方法很簡(jiǎn)單,如下所示:
- 我們將初始化兩個(gè)列表 IE 一個(gè)承載輸出,另一個(gè)充當(dāng)我們的堆棧數(shù)據(jù)結(jié)構(gòu)。堆棧將使用二叉樹(shù)的根值進(jìn)行初始化。
- 然后,只要堆棧有值,我們就會(huì)在堆棧上執(zhí)行一個(gè) while 循環(huán)。在循環(huán)中,依次進(jìn)行以下操作:
- 刪除(彈出)堆棧中最頂部的值(根節(jié)點(diǎn))并將其附加到輸出列表
- 將彈出值的右孩子壓入堆棧
- 將彈出值的左孩子壓入堆棧
- 返回循環(huán)結(jié)束時(shí)的輸出列表
作為這個(gè)過(guò)程的結(jié)果,將首先訪問(wèn)根值,然后訪問(wèn)左子樹(shù),最后訪問(wèn)右子樹(shù)值。
需要注意的是,右孩子首先被推入堆棧,然后是左孩子。這是因?yàn)槎褩5?LIFO 特性。這樣做將允許我們先訪問(wèn)左孩子,然后再訪問(wèn)右孩子。
說(shuō)話很便宜,給我看代碼:
# 二叉樹(shù)節(jié)點(diǎn)的定義 類樹(shù)節(jié)點(diǎn): def __init__(self, val=0, left=None, right=None): 自我.val = val self.left = 左 self.right = 對(duì) 類解決方案: def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: 輸出,節(jié)點(diǎn)堆棧 = [],[根] 而節(jié)點(diǎn)堆棧: 節(jié)點(diǎn) = nodestack.pop() if node: # preorder: root -> left -> right output.append(node.val) nodestack.append(node.right) nodestack.append(node.left) 返回輸出
如果這篇文章對(duì)您有幫助,請(qǐng)隨意喜歡并訂閱我的時(shí)事通訊,以獲取更多 Python 中的 DSA 內(nèi)容。
到此這篇關(guān)于Python3中二叉樹(shù)前序遍歷的迭代解決方案的文章就介紹到這了,更多相關(guān)Python二叉樹(shù)遍歷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Django 實(shí)現(xiàn)外鍵去除自動(dòng)添加的后綴‘_id’
今天小編就為大家分享一篇Django 實(shí)現(xiàn)外鍵去除自動(dòng)添加的后綴‘_id’,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11詳細(xì)聊一聊為什么Python沒(méi)有main函數(shù)
相信很多初學(xué)python的人看代碼的時(shí)候都會(huì)先找一下main()方法,從main往下看,但事實(shí)上python中是沒(méi)有你理解中的“main()”方法的,下面這篇文章主要給大家介紹了關(guān)于為什么Python沒(méi)有main函數(shù)的相關(guān)資料,需要的朋友可以參考下2023-03-03利用selenium爬蟲(chóng)抓取數(shù)據(jù)的基礎(chǔ)教程
這篇文章主要給大家介紹了關(guān)于如何利用selenium爬蟲(chóng)抓取數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用selenium具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06python機(jī)器學(xué)習(xí)理論與實(shí)戰(zhàn)(一)K近鄰法
這篇文章主要為大家詳細(xì)介紹了python機(jī)器學(xué)習(xí)理論與實(shí)戰(zhàn)第一篇,K近鄰法的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01