# Leetcode 100. Same tree 相同的樹
## 題解思路
中序遍歷兩顆樹,只要兩個指針指向的節點不相同,或者是兩個指針指向的節點的值不同,就回傳False,如果遍歷到最後,就回傳True。
## DFS
```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:
if not p and not q:
return True
stack = []
cur_p, cur_q = p, q
while cur_p or cur_q or stack:
if (not cur_p and cur_q) or (cur_p and not cur_q):
return False
elif cur_p and cur_q:
stack.append((cur_p,cur_q))
cur_p = cur_p.left
cur_q = cur_q.left
elif not cur_p and not cur_q:
node_p, node_q = stack.pop()
if node_p.val != node_q.val:
return False
cur_p = node_p.right
cur_q = node_q.right
return True
```
2023.07.12 AC (Recursion)
```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:
def dfs(p: TreeNode, q: TreeNode):
if not p and not q:
return True
if (not p and q) or (not q and p) or p.val != q.val:
return False
return dfs(p.left,q.left) and dfs(p.right,q.right)
return dfs(p,q)
```