Leetcode——144. 二叉樹的前序遍歷

大寫的ZDQ發表於2019-02-23

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

示例:

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

2
/
3

輸出: [1,2,3]
進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?

思路:
用棧(Stack)的思路來處理問題。

前序遍歷的順序為根-左-右,具體演算法為:

把根節點push到棧中
迴圈檢測棧是否為空,若不空,則取出棧頂元素,儲存其值
看其右子節點是否存在,若存在則push到棧中
看其左子節點,若存在,則push到棧中。

在這裡插入圖片描述

class Solution:
    def preorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if not root:
            return []
        stack = [root]
        res = []
        while stack:
            node = stack.pop()	#pop掉棧頂元素
            res.append(node.val)
            if node.right:		#先右後左,因為棧是先入後出
                stack.append(node.right)
            if node.left:
                stack.append(node.left)
        return res

相關文章