刷題系列 - Python用非遞迴實現二叉樹前序遍歷
刷刷題換換下腦子。
然後去一個刷題網站,從入門開始,沒想到python寫多了,資料結構都忘了,第一個二叉樹前序遍歷就想了好久才寫出來。這裡記錄下,也算記錄。
二叉樹前序遍歷(Binary Tree Preorder Traversal), 前序遍歷首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。
如下圖所示,前序遍歷結果:ABDECF
考慮了下,要建立兩個佇列,一個放遍歷結果,一個做類似棧作用,把路過節點放入;如果當前節點左邊節點存在,讀取值並放入棧繼續去下個左節點, 如果沒有 左邊節點則去右節點,同樣操作;如果都沒有,則棧彈出最後一個節點,刪除關聯,並把棧中上一個節點作為當前節點,相當於返回走。
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def preorderTraversal(self, root: TreeNode) -> List[int]: traversalList = [] nodeList = [] # add the first one to node list, and travel from left node first, then right; if a node without left #and righ sub-node, pop it from node list, then remove the link with parent node; traverlous finish as root list #is empty. if root != None: traversalList.append(root.val) nodeList.append(root) currentNode = root while nodeList != []: if currentNode.left != None: currentNode = currentNode.left traversalList.append(currentNode.val) nodeList.append(currentNode) elif currentNode.right != None: currentNode = currentNode.right traversalList.append(currentNode.val) nodeList.append(currentNode) else: nodeList.pop() if nodeList != []: if nodeList[-1].right == currentNode: nodeList[-1].right = None elif nodeList[-1].left == currentNode: nodeList[-1].left = None currentNode = nodeList[-1] return traversalList
透過後,執行時間只能一般,想想應該有更好的方法,比如使用NP.Array 矩陣判斷。這裡就不細緻研究了
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2673436/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 刷題系列 - Python用非遞迴實現二叉樹後續遍歷Python遞迴二叉樹
- 刷題系列 - Python用非遞迴實現二叉樹中序遍歷Python遞迴二叉樹
- 【刷題】二叉樹非遞迴遍歷二叉樹遞迴
- 遍歷二叉樹-------遞迴&非遞迴二叉樹遞迴
- 什麼是遍歷二叉樹,JavaScript實現二叉樹的遍歷(遞迴,非遞迴)二叉樹JavaScript遞迴
- 二叉樹非遞迴遍歷二叉樹遞迴
- 二叉樹的所有遍歷非遞迴實現二叉樹遞迴
- 二叉樹的非遞迴遍歷——java實現二叉樹遞迴Java
- python實現二叉樹及其七種遍歷方式(遞迴+非遞迴)Python二叉樹遞迴
- 遍歷二叉樹的遞迴與非遞迴程式碼實現二叉樹遞迴
- 刷題系列 - Python用遞迴實現求二叉樹深度Python遞迴二叉樹
- [java] 二叉樹的後序遍歷(遞迴與非遞迴實現)Java二叉樹遞迴
- 非遞迴先序遍歷二叉樹遞迴二叉樹
- 刷題系列 - Python實現二叉樹按層級遍歷Python二叉樹
- 樹3-二叉樹非遞迴遍歷(棧)二叉樹遞迴
- 二叉樹的四種遍歷(遞迴與非遞迴)二叉樹遞迴
- 【資料結構】二叉樹遍歷(遞迴+非遞迴)資料結構二叉樹遞迴
- 二叉樹的非遞迴遍歷寫法二叉樹遞迴
- 樹(2)--二叉樹的遍歷(非遞迴)+線索二叉樹二叉樹遞迴
- 每天刷個演算法題20160518:非遞迴二叉樹遍歷演算法遞迴二叉樹
- 二叉樹的建立與遍歷(遞迴實現)二叉樹遞迴
- 二叉樹建立及遍歷演算法(遞迴及非遞迴)二叉樹演算法遞迴
- 二叉樹的前中後序遍歷(遞迴和非遞迴版本)二叉樹遞迴
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- 【根據前序和中序遍歷構造二叉樹】棧+迭代 || 遞迴二叉樹遞迴
- 非遞迴實現先序遍歷和中序遍歷遞迴
- 刷題系列 - 給出前序和後序遍歷佇列,構造對應二叉樹佇列二叉樹
- 二叉樹迭代器(中序遞迴、前序和後序遍歷)演算法二叉樹遞迴演算法
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴
- 資料結構-樹以及深度、廣度優先遍歷(遞迴和非遞迴,python實現)資料結構遞迴Python
- 刷題筆記:樹的前序、中序、後序遍歷筆記
- 二叉樹建立,前序遍歷,中序遍歷,後序遍歷 思路二叉樹
- 二叉樹的建立、前序遍歷、中序遍歷、後序遍歷二叉樹
- 【模板題】- 144. 二叉樹的前序遍歷二叉樹
- python3實現二叉樹的遍歷與遞迴演算法解析Python二叉樹遞迴演算法
- 遍歷二叉樹的迭代和遞迴方法二叉樹遞迴
- Day14 | 二叉樹遞迴遍歷二叉樹遞迴
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹