每日leetcode-陣列-145. 二叉樹的後序遍歷
阿新 • • 發佈:2021-07-06
分類:二叉樹-二叉樹的遍歷
題目描述:給定一個二叉樹,返回它的後序遍歷。
解題思路:
遞迴:
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def postorderTraversal(self, root: TreeNode) -> List[int]: 遞迴def postorder(root:TreeNode): if not root: return [] postorder(root.left) postorder(root.right) res.append(root.val) res = [] postorder(root) return res
迭代:
# Definition for a binary tree node. # class TreeNode:# def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def postorderTraversal(self, root: TreeNode) -> List[int]: # 迭代 if not root: return [] res,stack = [],[root] prev= root # 為了判斷父子節點關係 while len(stack): root = stack.pop()# 取出一個節點,表示開始訪問以該節點為根的子樹 if (not root.right and not root.left ) or ( root.right ==prev or root.left == prev): # 如果該節點為葉子節點,或者已經訪問該節點的子節點 res.append(root.val) # 直接訪問 prev = root else:# 否則就順序把當前節點,右孩子,左孩子入棧 stack.append(root) if root.right: stack.append(root.right) if root.left: stack.append(root.left) return res
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def postorderTraversal(self, root: TreeNode) -> List[int]: if not root: return [] res,stack=[],[] prev = None while root or stack: while root: stack.append(root) root = root.left root = stack.pop() # 比前序和中序的模板增加一個判斷過程:節點沒有右孩子或已經訪問了該節點的子節點 if not root.right or root.right == prev: res.append(root.val) prev = root root = None else: stack.append(root) root = root.right return res