刷題系列 - 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遞迴二叉樹
- python實現二叉樹及其七種遍歷方式(遞迴+非遞迴)Python二叉樹遞迴
- 遍歷二叉樹-------遞迴&非遞迴二叉樹遞迴
- 什麼是遍歷二叉樹,JavaScript實現二叉樹的遍歷(遞迴,非遞迴)二叉樹JavaScript遞迴
- 刷題系列 - Python用遞迴實現求二叉樹深度Python遞迴二叉樹
- 二叉樹的所有遍歷非遞迴實現二叉樹遞迴
- 遍歷二叉樹的遞迴與非遞迴程式碼實現二叉樹遞迴
- 刷題系列 - Python實現二叉樹按層級遍歷Python二叉樹
- 非遞迴先序遍歷二叉樹遞迴二叉樹
- 樹3-二叉樹非遞迴遍歷(棧)二叉樹遞迴
- 二叉樹的四種遍歷(遞迴與非遞迴)二叉樹遞迴
- 二叉樹的非遞迴遍歷寫法二叉樹遞迴
- 二叉樹的建立與遍歷(遞迴實現)二叉樹遞迴
- 二叉樹的前中後序遍歷(遞迴和非遞迴版本)二叉樹遞迴
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- 【根據前序和中序遍歷構造二叉樹】棧+迭代 || 遞迴二叉樹遞迴
- 資料結構-樹以及深度、廣度優先遍歷(遞迴和非遞迴,python實現)資料結構遞迴Python
- 非遞迴實現先序遍歷和中序遍歷遞迴
- 刷題系列 - 給出前序和後序遍歷佇列,構造對應二叉樹佇列二叉樹
- 144. 二叉樹的前序遍歷(java實現)--LeetCode二叉樹JavaLeetCode
- LeetCode題144. 二叉樹的前序遍歷LeetCode二叉樹
- 【模板題】- 144. 二叉樹的前序遍歷二叉樹
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 二叉樹迭代器(中序遞迴、前序和後序遍歷)演算法二叉樹遞迴演算法
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴
- Day14 | 二叉樹遞迴遍歷二叉樹遞迴
- 144. 二叉樹的前序遍歷二叉樹
- 刷題筆記:樹的前序、中序、後序遍歷筆記
- Android遍歷所有控制元件的遞迴和非遞迴實現Android控制元件遞迴
- 遍歷二叉樹的迭代和遞迴方法二叉樹遞迴
- 資料結構初階--二叉樹(前中後序遍歷遞迴+非遞迴實現+相關求算結點實現)資料結構二叉樹遞迴
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- Leetcode——144. 二叉樹的前序遍歷LeetCode二叉樹
- Java中用遞迴和迭代實現二叉樹的中序( InOrder )遍歷Java遞迴二叉樹
- 遞迴遍歷樹狀結構優雅實現遞迴
- 根據前序遍歷序列、中序遍歷序列,重建二叉樹二叉樹
- 144. 二叉樹的遍歷「前序、中序、後序」 Golang實現二叉樹Golang