↓快轉到主要內容
  1. LeetCode/

LeetCode 144: Binary Tree Preorder Traversal

·1 分鐘· ·
LeetCode Easy Stack Tree Depth-First-Search Binary-Tree
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-07-20

  • 提交紀錄:Runtime Error → Wrong Answer ×2 → Runtime Error → Accepted ×4

解題思路
#

前序是「根、左、右」,彈出的時候就記錄(Tree)。stack 是後進先出,所以先推右小孩、再推左小孩,左邊才會先被彈出來。

我的嘗試
#

大部分的 RE 都是同一個原因:空樹時直接取 root.left / root.val(root 是 None)。

正確解法
#

class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        res, stack = [], [root] if root else []
        while stack:
            node = stack.pop()
            res.append(node.val)
            if node.right:
                stack.append(node.right)
            if node.left:
                stack.append(node.left)
        return res

複雜度
#

時間 O(n),空間 O(h)。

要特別避免的錯誤
#

  • 推進 stack 的順序跟想處理的順序相反。

面試口說整理
#

前序是根、左、右,我用 stack,彈出就記錄,先推右再推左,左子樹就會先處理。時間 O(n)。

相關文章

LeetCode 94: Binary Tree Inorder Traversal
·1 分鐘
LeetCode Easy Stack Tree Depth-First-Search Binary-Tree
LeetCode 94 解題筆記:迭代的中序遍歷,一路往左把節點推進 stack,彈出時記錄,再轉向右子樹
LeetCode 83: Remove Duplicates from Sorted List
·1 分鐘
LeetCode Easy Linked-List
LeetCode 83 解題筆記:已排序,重複的一定相鄰;cur 跟 cur.next 一樣就跳過 cur.next,不一樣才前進
LeetCode 69: Sqrt(x)
·1 分鐘
LeetCode Easy Math Binary-Search Newtons-Method
LeetCode 69 解題筆記:找最大的 mid 讓 mid² <= x;閉區間二分結束時 r 就是答案
LeetCode 27: Remove Element
·1 分鐘
LeetCode Easy Array Two-Pointers
LeetCode 27 解題筆記:寫入指標只寫不等於 val 的數,最後回傳寫入的個數
LeetCode 28: Find the Index of the First Occurrence in a String
·1 分鐘
LeetCode Easy Two-Pointers String String-Matching Z-Algorithm
LeetCode 28 解題筆記:在每個起點比對 needle,或直接用 str.find;index 找不到會丟例外
LeetCode 35: Search Insert Position
·1 分鐘
LeetCode Easy Array Binary-Search
LeetCode 35 解題筆記:找第一個 >= target 的位置(lower bound);半開區間 [l, r) 要配 r = mid,不能寫 r = mid - 1