1. 程式人生 > 實用技巧 >每日一題20201208(144. 二叉樹的前序遍歷)

每日一題20201208(144. 二叉樹的前序遍歷)

144. 二叉樹的前序遍歷

遞迴寫法

前序遍歷順序就是 根節點->左節點->右節點
# 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 preorderTraversal(self, root: TreeNode) -> List[int]:
        node = []
        self.order(root, node)
        return node

    def order(self, root, node):
        if root is None:
            return
        node.append(root.val)
        self.order(root.left, node)
        self.order(root.right, node)

迭代寫法

通過一個棧來維護節點的輸出順序,每次出一個節點,把節點的值拿出來放到結果數組裡,請注意棧是先進後出。

所以先進right節點,到時候先出的就是left節點。
# 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 preorderTraversal(self, root: TreeNode) -> List[int]:
        if root is None:
            return []
        stack = [root]
        ans = []
        while len(stack) > 0:
            current = stack.pop()
            ans.append(current.val)
            if current.right is not None:
                stack.append(current.right)
            if current.left is not None:
                stack.append(current.left)
        return ans