100.Same Tree
===
###### tags: `Easy`,`Tree`,`DFS`,`BFS`,`Binary Tree`
[100. Same Tree](https://leetcode.com/problems/same-tree/)
### 題目描述
Given the roots of two binary trees `p` and `q`, write a function to check if they are the same or not.
Two binary trees are considered the same if they are structurally identical, and the nodes have the same value.
### 範例
**Example 1:**
![](https://assets.leetcode.com/uploads/2020/12/20/ex1.jpg)
```
Input: p = [1,2,3], q = [1,2,3]
Output: true
```
**Example 2:**
![](https://assets.leetcode.com/uploads/2020/12/20/ex2.jpg)
```
Input: p = [1,2], q = [1,null,2]
Output: false
```
**Example 3:**
![](https://assets.leetcode.com/uploads/2020/12/20/ex3.jpg)
```
Input: p = [1,2,1], q = [1,1,2]
Output: false
```
**Constraints**:
* The number of nodes in both trees is in the range `[0, 100]`.
* -10^4^ <= `Node.val` <= 10^4^
### 解答
#### Javascript
```javascript=
function isSameTree(p, q) {
if (p === null && q === null) return true;
if (p === null || q === null) return false;
if (p.val !== q.val) return false;
return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}
```
> [name=Marsgoat] [time= Jan 10, 2023]
#### Python
```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
return p.val == q.val and self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
```
> [name=Ron Chen][time=Tue, Jan 10, 2023]
分享討論區中發現的一行解法
```python=
def isSameTree(self, p, q):
return p and q and p.val == q.val and all(map(self.isSameTree, (p.left, p.right), (q.left, q.right))) or p is q
```
#### c#
```csharp=
public class Solution {
public bool IsSameTree(TreeNode p, TreeNode q) {
if (p == null && q == null) return true;
if (p == null || q == null) return false;
if (p.val != q.val) return false;
return IsSameTree(p.left, q.left) && IsSameTree(p.right, q.right);
}
}
```
> [name=Jim][time=Tue, Jan 10, 2023]
### Reference
[回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)