刷題系列 - Python用非遞迴實現二叉樹中序遍歷
刷題沒事會上癮,繼續做了非遞迴中序遍歷。
中序遍歷其實和就是先找到最左邊節點,然後是其上級節點,再到上級節點的右邊節點。
比如下面的中序遍歷結果就是 DBEAFC
非遞迴實現邏輯,我想的這個比較笨。就是用一個佇列做棧,先按照左邊遍歷壓入棧中;當到左邊葉子節點時候,讀取並刪除關聯;推出棧回到上一級節點,如果上級節點沒有右節點,則讀取繼續刪除;如果有,則遍歷右節點;為了防止右邊遍歷返回時候再次讀取父節點;要記錄下上次被推出節點,如果是右節點,則不讀取父節點資訊。
程式碼寫的很難看,不去雕琢了,見笑。
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def inorderTraversal(self, root: TreeNode) -> List[int]: traversalList = [] nodeList = [] # similar as Preorder traversal, the only change is that the value of node is recored when the node doesn't have left sub-node; new object removedNode as popped node, if a node's right sub-node is removedNode, then it should be popped both. if root != None: nodeList.append(root) currentNode = root removedNode = None while nodeList != []: if currentNode.left != None: currentNode = currentNode.left nodeList.append(currentNode) elif currentNode.right == None or currentNode.right == removedNode: if currentNode.right == None: traversalList.append(currentNode.val) removedNode = nodeList.pop() if nodeList!= []: currentNode = nodeList[-1] currentNode.left = None elif currentNode.right !=None: traversalList.append(currentNode.val) currentNode = currentNode.right nodeList.append(currentNode) return traversalList
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2673709/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 刷題系列 - Python用非遞迴實現二叉樹前序遍歷Python遞迴二叉樹
- 刷題系列 - Python用非遞迴實現二叉樹後續遍歷Python遞迴二叉樹
- 【刷題】二叉樹非遞迴遍歷二叉樹遞迴
- 非遞迴先序遍歷二叉樹遞迴二叉樹
- [java] 二叉樹的後序遍歷(遞迴與非遞迴實現)Java二叉樹遞迴
- 非遞迴實現先序遍歷和中序遍歷遞迴
- 遍歷二叉樹-------遞迴&非遞迴二叉樹遞迴
- 什麼是遍歷二叉樹,JavaScript實現二叉樹的遍歷(遞迴,非遞迴)二叉樹JavaScript遞迴
- 二叉樹的前中後序遍歷(遞迴和非遞迴版本)二叉樹遞迴
- 二叉樹非遞迴遍歷二叉樹遞迴
- 二叉樹的所有遍歷非遞迴實現二叉樹遞迴
- 二叉樹的非遞迴遍歷——java實現二叉樹遞迴Java
- python實現二叉樹及其七種遍歷方式(遞迴+非遞迴)Python二叉樹遞迴
- 遍歷二叉樹的遞迴與非遞迴程式碼實現二叉樹遞迴
- 刷題系列 - Python用遞迴實現求二叉樹深度Python遞迴二叉樹
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- 遞迴和迭代實現二叉樹先序、中序、後序和層序遍歷遞迴二叉樹
- 刷題系列 - Python實現二叉樹按層級遍歷Python二叉樹
- 非遞迴遍歷二叉樹的四種策略-先序、中序、後序和層序遞迴二叉樹
- 樹3-二叉樹非遞迴遍歷(棧)二叉樹遞迴
- PHP基於非遞迴演算法實現先序、中序及後序遍歷二叉樹操作示例PHP遞迴演算法二叉樹
- Java中用遞迴和迭代實現二叉樹的中序( InOrder )遍歷Java遞迴二叉樹
- 二叉樹的四種遍歷(遞迴與非遞迴)二叉樹遞迴
- 【資料結構】二叉樹遍歷(遞迴+非遞迴)資料結構二叉樹遞迴
- 二叉樹的非遞迴遍歷寫法二叉樹遞迴
- 資料結構初階--二叉樹(前中後序遍歷遞迴+非遞迴實現+相關求算結點實現)資料結構二叉樹遞迴
- 樹(2)--二叉樹的遍歷(非遞迴)+線索二叉樹二叉樹遞迴
- 每天刷個演算法題20160518:非遞迴二叉樹遍歷演算法遞迴二叉樹
- 二叉樹的建立與遍歷(遞迴實現)二叉樹遞迴
- 刷題系列 - 中序和後序遍歷佇列,構造對應二叉樹;佇列二叉樹
- [資料結構]二叉樹的前中後序遍歷(遞迴+迭代實現)資料結構二叉樹遞迴
- 二叉樹建立及遍歷演算法(遞迴及非遞迴)二叉樹演算法遞迴
- 二叉樹迭代器(中序遞迴、前序和後序遍歷)演算法二叉樹遞迴演算法
- 二叉樹建立,前序遍歷,中序遍歷,後序遍歷 思路二叉樹
- 二叉樹的建立、前序遍歷、中序遍歷、後序遍歷二叉樹
- 刷題筆記:樹的前序、中序、後序遍歷筆記
- 【根據前序和中序遍歷構造二叉樹】棧+迭代 || 遞迴二叉樹遞迴
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴