刷題系列 - Python用非遞迴實現二叉樹後續遍歷
順便把Python用非遞迴實現二叉樹後續遍歷也寫了。
其實前序中序和後續都是針對父節點說的。比如下面這個最簡單二叉樹。
前序就是ABC,父節點A在前
中序就是BAC,父節點A在中間
後序就是BCA,父節點A在最後
無論多複雜二叉樹,基本都是同樣遍歷流程。
後續遍歷可以說是最簡單的,從左開始遍歷並放入棧,讀取沒有下級節點的節點值,然後把該節點推出棧,並刪除和上級節點關聯;然後替換棧中最上的點,並去遍歷右邊子節點;直到棧為空,遍歷結束。
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def postorderTraversal(self, root: TreeNode) -> List[int]: traversalList = [] nodeList = [] # travel the node, add to node stack, if the node without any sub-node, record the val; then remove it and it's link with parnet, travel back to last one in stack. if root != None: nodeList.append(root) while nodeList != []: if nodeList[-1].left != None: nodeList.append(nodeList[-1].left ) elif nodeList[-1].right != None: nodeList.append(nodeList[-1].right) else: traversalList.append(nodeList[-1].val) currentNode = nodeList.pop() if nodeList != []: if nodeList[-1].right == currentNode: nodeList[-1].right = None elif nodeList[-1].left == currentNode: nodeList[-1].left = None return traversalList
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2673729/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 刷題系列 - Python用非遞迴實現二叉樹前序遍歷Python遞迴二叉樹
- 刷題系列 - Python用非遞迴實現二叉樹中序遍歷Python遞迴二叉樹
- python實現二叉樹及其七種遍歷方式(遞迴+非遞迴)Python二叉樹遞迴
- 遍歷二叉樹-------遞迴&非遞迴二叉樹遞迴
- 什麼是遍歷二叉樹,JavaScript實現二叉樹的遍歷(遞迴,非遞迴)二叉樹JavaScript遞迴
- 二叉樹的所有遍歷非遞迴實現二叉樹遞迴
- 刷題系列 - Python用遞迴實現求二叉樹深度Python遞迴二叉樹
- 遍歷二叉樹的遞迴與非遞迴程式碼實現二叉樹遞迴
- 刷題系列 - Python實現二叉樹按層級遍歷Python二叉樹
- 非遞迴先序遍歷二叉樹遞迴二叉樹
- 二叉樹的前中後序遍歷(遞迴和非遞迴版本)二叉樹遞迴
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- 樹3-二叉樹非遞迴遍歷(棧)二叉樹遞迴
- 二叉樹的四種遍歷(遞迴與非遞迴)二叉樹遞迴
- 二叉樹的非遞迴遍歷寫法二叉樹遞迴
- 二叉樹的建立與遍歷(遞迴實現)二叉樹遞迴
- 資料結構初階--二叉樹(前中後序遍歷遞迴+非遞迴實現+相關求算結點實現)資料結構二叉樹遞迴
- 資料結構-樹以及深度、廣度優先遍歷(遞迴和非遞迴,python實現)資料結構遞迴Python
- 非遞迴實現先序遍歷和中序遍歷遞迴
- 二叉樹建立後,如何使用遞迴和棧遍歷二叉樹?二叉樹遞迴
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴
- Day14 | 二叉樹遞迴遍歷二叉樹遞迴
- [資料結構]二叉樹的前中後序遍歷(遞迴+迭代實現)資料結構二叉樹遞迴
- PHP基於非遞迴演算法實現先序、中序及後序遍歷二叉樹操作示例PHP遞迴演算法二叉樹
- Android遍歷所有控制元件的遞迴和非遞迴實現Android控制元件遞迴
- 遍歷二叉樹的迭代和遞迴方法二叉樹遞迴
- 遞迴和迭代實現二叉樹先序、中序、後序和層序遍歷遞迴二叉樹
- Java中用遞迴和迭代實現二叉樹的中序( InOrder )遍歷Java遞迴二叉樹
- 遞迴遍歷樹狀結構優雅實現遞迴
- 刷題系列 - 中序和後序遍歷佇列,構造對應二叉樹;佇列二叉樹
- 迴圈遍歷二叉樹二叉樹
- 刷題系列 - 給出前序和後序遍歷佇列,構造對應二叉樹佇列二叉樹
- 二叉樹的遍歷實現二叉樹
- 刷題系列 - 用遞迴和遍歷兩個方法反轉一個單鏈佇列遞迴佇列
- 【每日一題】二叉樹的前中後序非遞迴整理每日一題二叉樹遞迴
- 【C++】翻轉二叉樹(遞迴、非遞迴)C++二叉樹遞迴
- 二叉樹迭代器(中序遞迴、前序和後序遍歷)演算法二叉樹遞迴演算法
- 二叉樹--後序遍歷二叉樹