# **Leetcode筆記(Same Tree)** :::info :information_source: 題目 : Same Tree, 類型 : binary tree , 等級 : easy 日期 : 2023/03/18,2023/05/24,2023/07/05,2023/09/21 ::: ### 嘗試 忘記存,原本想用queue。時間複雜度O(n),空間複雜度O(n) 2023/05/24 ```python class Solution: def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool: if not p and not q: return True if not p or not q: return False if p.val != q.val: return False return (self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)) ``` 2023/07/05 ```python class Solution: def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool: if not q and not p: return True if not q or not p: return False # 要注意這裡不能比較數字True 不然False會抓不出來 if q.val != p.val: return False return (self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)) ``` 2023/09/21 ```python class Solution: def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool: if not p and not q: return True if not p or not q: return False if p.val != q.val: return False return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right) ``` --- ### **優化** 時間複雜度O(p+q),空間複雜度O(n) ```python # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def isSameTree(self, p: Optional[TreeNode], q: Optional[TreeNode]) -> bool: # 兩個為null if not p and not q: return True # 一個為null if not p or not q: return False # value不一樣 if p.val != q.val: return False # 會走到這步驟的 就是node都存在且value一樣 return (self.isSameTree(p.left, q.left)) and (self.isSameTree(p.right, q.right)) ``` --- **:warning: 錯誤語法** :::warning 如果要return A and B(為一個bool),要把A和B括號起來 ::: **:thumbsup:學習** :::success 兩個都是null的話算是true 感覺像是這類跌代,都是考慮起始值,跟最後要怎麼停就好 ::: **思路** **講解連結** https://www.youtube.com/watch?v=vRbbcKXCxOw Provided by. NeetCode ###### tags: `binary tree` `easy` `leetcode`