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

LeetCode 965: Univalued Binary Tree

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

基本資料
#

難易度: easy 第一次嘗試:2022-09-26

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

解題思路
#

所有節點都跟根的值一樣(Tree 模板一)。遞迴檢查:這個節點的值等於目標,而且左右子樹也都是。空的子樹不違反條件,回傳 True。

我的嘗試
#

這題提交了 18 次,前面大部分是同一個錯:寫成 node.val == self.isUnivalTree(node.left) == self.isUnivalTree(node.right),拿節點的值跟遞迴回傳的布林值比。例如只有一個節點 [2]:兩邊回傳 True,2 == True 不成立,回傳 False。之後改成傳入目標值,又有幾次變數沒定義。

正確解法
#

class Solution:
    def isUnivalTree(self, root: Optional[TreeNode]) -> bool:
        def same(node):
            return not node or (node.val == root.val and same(node.left) and same(node.right))
        return same(root)

複雜度
#

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

要特別避免的錯誤
#

  • 遞迴函式回傳的是布林值,不能拿它跟節點的值比。

面試口說整理
#

我遞迴檢查每個節點的值是否等於根的值,空的子樹算成立,全部成立才回傳 True。時間 O(n)。

相關文章

LeetCode 993: Cousins in Binary Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 993 解題筆記:堂兄弟要同一層、但父節點不同;DFS 記錄 x 和 y 的深度與父節點再比較
LeetCode 637: Average of Levels in Binary Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 637 解題筆記:層序遍歷,每層加總除以節點數
LeetCode 404: Sum of Left Leaves
·1 分鐘
LeetCode Easy Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 404 解題筆記:DFS 時告訴小孩自己是不是左小孩,只有「是左小孩而且是葉子」才加
LeetCode 226: Invert Binary Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 226 解題筆記:每個節點交換左右小孩;用同時指定,避免先改掉的那邊被拿來用
LeetCode 111: Minimum Depth of Binary Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 111 解題筆記:最小深度要到葉子才算;只有一邊有小孩時不能拿空的那邊(深度 0)當最小值
LeetCode 112: Path Sum
·1 分鐘
LeetCode Easy Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 112 解題筆記:往下走時把 targetSum 減掉目前的值,到葉子時剛好是 0(或等於葉子的值)就成立