LeetCode Hard 145 二叉樹後序遍歷 Python
阿新 • • 發佈:2018-12-31
def postorderTraversal(self, root): """ 記住得了= = 就訪問當前root,然後左子樹入棧,右子樹入棧,最後逆序一下就好了,return output[::-1] 相當於是這麼個思路: 目標:左右根 那麼我就先求出來根右左,先根遍歷是好訪問的,根右左的話,因為是棧,所以先訪問根,然後左孩子節點入棧, 再右孩子節點入棧,這樣出棧的順序就是跟右左了,其實可以聯想一下,其實左右只是人為設定和規定的嘛,就像二分類要用10,也可以看成是01 一個道理,那就調換左右順序唄,這樣就可以根右左的訪問 最後再將【根右左】遍歷得到的結果逆序,不就是左右根了,比較討巧 """ if root is None: return [] stack, output = [root, ], [] while stack: root = stack.pop() output.append(root.val) if root.left is not None: stack.append(root.left) if root.right is not None: stack.append(root.right) return output[::-1] def postorderTraversal2(self, root): """ :type root: TreeNode :rtype: List[int] """ if not root: return [] ans = [] visited = set() stack = [root] while stack: top = stack[-1] if top in visited: ans.append(stack.pop().val) else: if top.right: stack.append(top.right) if top.left: stack.append(top.left) visited.add(top) return ans def postorderTraversal1(self, root): """ 演算法:遞迴遍歷 """ return [] if root == None else self.postorderTraversal(root.left) + self.postorderTraversal(root.right) + [root.val]