1. 程式人生 > 其它 >python3多種方式實現後序遍歷

python3多種方式實現後序遍歷

技術標籤:演算法刷題二叉樹資料結構leetcodepython演算法

考研人資訊庫

此公眾號會發表計算機考研(初複試資訊)、夏令營等資料,方便考研人對資訊的獲取,節約自身查詢資料的時間,回覆408,可獲得資料結構、作業系統、計算機網路、計算機組成原理全科資料

給定一個二叉樹,返回它的 後序 遍歷。

示例:

輸入: [1,null,2,3]
1
\
2
/
3

輸出: [3,2,1]

第一種

遞迴

# 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]:
        res=[]
        def postorder(root):
            if not root:
                return 
            postorder(root.left)
            postorder(root.right)
            res.append(root.val)
        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 []
        stack=[]
        res=[]
        cur=root
        r=None
        while cur or stack:
            while cur:
                stack.append(cur)
                cur=cur.left
            cur=stack[-1]
            if cur.right and cur.right!=r:#右子樹不為空,且沒有訪問
                cur=cur.right
            else:
                stack.pop()
                res.append(cur.val)
                r=cur
                cur=None
        return res