1. 程式人生 > 其它 >每日leetcode-陣列-145. 二叉樹的後序遍歷

每日leetcode-陣列-145. 二叉樹的後序遍歷

分類:二叉樹-二叉樹的遍歷

題目描述:給定一個二叉樹,返回它的後序遍歷。

解題思路:

遞迴:

# 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