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

LeetCode 988: Smallest String Starting From Leaf

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

基本資料
#

難易度: medium 第一次嘗試:2024-04-17

  • 提交紀錄:Accepted(一次通過)

解題思路
#

字串是從葉子讀到根,所以往下走時把字元加在前面(Tree 模板一),到葉子時就是完整的字串,跟目前最小的比。不能在每個節點取左右較小的再往上接,因為接上前綴之後大小關係可能改變。

我的解法
#

class Solution:
    def smallestFromLeaf(self, root: Optional[TreeNode]) -> str:
        best = None
        def dfs(node, s):
            nonlocal best
            if not node:
                return
            s = chr(ord("a") + node.val) + s
            if not node.left and not node.right:
                if best is None or s < best:
                    best = s
            dfs(node.left, s)
            dfs(node.right, s)
        dfs(root, "")
        return best

複雜度
#

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

要特別避免的錯誤
#

  • 方向是從葉子到根,字元要加在前面。

面試口說整理
#

我用 DFS 往下走,每到一個節點把字元加在字串前面,到葉子時這就是從葉子到根的字串,跟目前最小的比較。時間 O(n · h)。

相關文章

LeetCode 113: Path Sum II
·1 分鐘
LeetCode Medium Backtracking Tree Depth-First-Search Binary-Tree
LeetCode 113 解題筆記:回溯記錄目前的路徑,到葉子時總和等於目標就存一份複本;值可能是負的,不能提早剪枝
LeetCode 79: Word Search
·2 分鐘
LeetCode Medium Array String Backtracking Depth-First-Search
LeetCode 79 解題筆記:從每一格開始回溯,往四個方向比對下一個字元,走過的格子暫時標記,回溯時還原;先用字元次數剪枝
LeetCode 606: Construct String from Binary Tree
·1 分鐘
LeetCode Medium String Tree Depth-First-Search Binary-Tree
LeetCode 606 解題筆記:前序輸出,左子樹空但右子樹不空時要留一個空括號 (),右子樹空時可以省略
LeetCode 257: Binary Tree Paths
·1 分鐘
LeetCode Easy String Backtracking Tree Depth-First-Search
LeetCode 257 解題筆記:DFS 帶著目前的路徑字串往下,到葉子時把整條路徑加進答案
LeetCode 116: Populating Next Right Pointers in Each Node
·1 分鐘
LeetCode Medium Linked-List Tree Depth-First-Search Breadth-First-Search
LeetCode 116 解題筆記:完美二元樹,用上一層已經接好的 next 走過這一層:left.next = right,right.next = next.left;O(1) 額外空間
LeetCode 129: Sum Root to Leaf Numbers
·1 分鐘
LeetCode Medium Tree Depth-First-Search Binary-Tree
LeetCode 129 解題筆記:往下走時目前的數字乘 10 加上節點的值,到葉子時加進總和