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

LeetCode 129: Sum Root to Leaf Numbers

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

基本資料
#

難易度: medium 第一次嘗試:2022-11-18

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

解題思路
#

每往下一層,數字就多一位:num = num * 10 + node.val(Tree 模板一)。到葉子時這條路徑的數字就完成了,加進總和。用整數算比轉成字串再接起來快。

我的嘗試
#

2024 年寫的時候一版沒處理「只有一邊有小孩」:遞迴進到 None 之後取 node.left,例如 [9, 9](只有左小孩)報錯。

正確解法
#

class Solution:
    def sumNumbers(self, root: Optional[TreeNode]) -> int:
        def dfs(node, num):
            if not node:
                return 0
            num = num * 10 + node.val
            if not node.left and not node.right:
                return num
            return dfs(node.left, num) + dfs(node.right, num)
        return dfs(root, 0)

複雜度
#

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

要特別避免的錯誤
#

  • 只有一邊有小孩時,空的那邊要回傳 0,不能對 None 取值。

面試口說整理
#

我往下遞迴時把目前的數字乘 10 再加上節點的值,到葉子時回傳這個數字,左右兩邊的結果加起來就是總和。時間 O(n)。

相關文章

LeetCode 113: Path Sum II
·1 分鐘
LeetCode Medium Backtracking Tree Depth-First-Search Binary-Tree
LeetCode 113 解題筆記:回溯記錄目前的路徑,到葉子時總和等於目標就存一份複本;值可能是負的,不能提早剪枝
LeetCode 236: Lowest Common Ancestor of a Binary Tree
·1 分鐘
LeetCode Medium Tree Depth-First-Search Binary-Tree Binary-Lifting
LeetCode 236 解題筆記:遞迴回傳子樹裡找到的 p 或 q;左右都找到代表在這裡分岔,這個節點就是 LCA
LeetCode 337: House Robber III
·1 分鐘
LeetCode Medium Dynamic-Programming Tree Depth-First-Search Binary-Tree
LeetCode 337 解題筆記:樹上 DP,每個節點回傳(搶它、不搶它)的最大值;不是一層一層交錯搶
LeetCode 1448: Count Good Nodes in Binary Tree
·1 分鐘
LeetCode Medium Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 1448 解題筆記:DFS 往下傳路徑上的最大值,節點的值大於等於它就是好節點
LeetCode 199: Binary Tree Right Side View
·1 分鐘
LeetCode Medium Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 199 解題筆記:層序遍歷,每一層最右邊的節點就是從右邊看得到的
LeetCode 230: Kth Smallest Element in a BST
·1 分鐘
LeetCode Medium Tree Depth-First-Search Binary-Search-Tree Binary-Tree
LeetCode 230 解題筆記:BST 的中序遍歷是由小到大,迭代中序走到第 k 個就停