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

LeetCode 872: Leaf-Similar Trees

·1 分鐘· ·
LeetCode Easy 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-09-17

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

解題思路
#

葉子序列是由左到右的順序。DFS(先左後右)收集到的葉子剛好就是這個順序(Tree 模板一)。兩棵樹各收集一次再比較。

我的嘗試
#

前兩版用 queue 做 BFS 收集葉子,順序是一層一層的。例如 [4, None, 3, 2, 2, 8, None, 1] 和 [3, 5, None, 4, 8, None, 1]:由左到右的葉子分別是 [8, 1] 和 [1, 8],答案 False;BFS 收集到的兩邊都是 [8, 1],回傳 True。

正確解法
#

class Solution:
    def leafSimilar(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> bool:
        def leaves(node):
            if not node:
                return []
            if not node.left and not node.right:
                return [node.val]
            return leaves(node.left) + leaves(node.right)
        return leaves(root1) == leaves(root2)

複雜度
#

時間 O(n + m),空間 O(n + m)。

要特別避免的錯誤
#

  • 用 BFS 收集時,較淺的葉子會排在較深但比較左邊的葉子前面,順序就錯了。

面試口說整理
#

我用 DFS 先左後右收集兩棵樹的葉子,這樣得到的就是由左到右的順序,再比較兩個序列。時間 O(n + m)。

相關文章

LeetCode 637: Average of Levels in Binary Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 637 解題筆記:層序遍歷,每層加總除以節點數
LeetCode 671: Second Minimum Node In a Binary Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search Binary-Tree
LeetCode 671 解題筆記:根就是最小值;第二小值是整棵樹裡第一個比根大的最小值,值等於根的子樹才需要往下找
LeetCode 563: Binary Tree Tilt
·1 分鐘
LeetCode Easy Tree Depth-First-Search Binary-Tree Dp-on-Trees
LeetCode 563 解題筆記:後序回傳子樹的總和,每個節點的 tilt 是左右子樹總和的差,加進答案
LeetCode 572: Subtree of Another Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search String-Matching Binary-Tree
LeetCode 572 解題筆記:對 root 的每一個節點都檢查一次「以它為根的子樹跟 subRoot 是否相同」;遞迴時要呼叫 isSubtree,不是只比左右小孩
LeetCode 501: Find Mode in Binary Search Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search Binary-Search-Tree Binary-Tree
LeetCode 501 解題筆記:BST 中序是排序的,相同的值會連在一起;中序時數目前這段的長度,比最大值大就重設答案,一樣大就加入
LeetCode 543: Diameter of Binary Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search Binary-Tree Dp-on-Trees
LeetCode 543 解題筆記:直徑可能不經過根;後序回傳高度,同時在每個節點用「左高 + 右高」更新答案;算的是邊數