---
# System prepended metadata

title: 100. Same Tree
tags: [LeetCode]

---

---
tags: LeetCode
---

# 100. Same Tree
Given two binary trees, 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:
```
Input:     1         1
          / \       / \
         2   3     2   3

        [1,2,3],   [1,2,3]

Output: true
```
Example 2:
```
Input:     1         1
          /           \
         2             2

        [1,2],     [1,null,2]

Output: false
```
Example 3:
```
Input:     1         1
          / \       / \
         2   1     1   2

        [1,2,1],   [1,1,2]

Output: false
```

輸入範本如下
```C#
public class Solution {
    public bool IsSameTree(TreeNode p, TreeNode q) {
        
    }
}
```

### 直覺想法
使用遞迴 , 先檢查目前走訪的這個位置 , 兩顆 tree 的值是否相同 , 若結構以及值都相同 , 則繼續走訪下一個位置.
DFS 走訪順序為 中左右.
```C#
92 ms	24.4 MB
You are here!
Your runtime beats 74.14 % of csharp submissions.
public bool IsSameTree(TreeNode p, TreeNode q)
{
     if (p != null && q != null && p.val == q.val)
     {
          return IsSameTree(p.left, q.left) && IsSameTree(p.right, q.right);
     }
     return p == q; // 只有 p == q == null 才會為 true
}
```

試圖使用兩個 Queue 採用 BFS 的方式去比較兩棵樹.
```C#
88 ms	24.2 MB
You are here!
Your runtime beats 92.63 % of csharp submissions.
public bool IsSameTree(TreeNode p, TreeNode q)
{
     Queue<TreeNode> pQueue = new Queue<TreeNode>();
     Queue<TreeNode> qQueue = new Queue<TreeNode>();
     pQueue.Enqueue(p);
     qQueue.Enqueue(q);
     while (pQueue.Count > 0 && qQueue.Count > 0)
     {
          var currP = pQueue.Dequeue();
          var currQ = qQueue.Dequeue();
          if (currP != null && currQ != null && currP.val == currQ.val)
          {
               pQueue.Enqueue(currP.left);
               qQueue.Enqueue(currQ.left);
               pQueue.Enqueue(currP.right);
               qQueue.Enqueue(currQ.right);
          }
          else if (currP == currQ)
          {
          }
          else
          {    // 左右兩兒子的結構不同或是 currP.val != currQ.val
               return false;
          }
     }
     return true; // 所有點都比較過 , 且值都相等
}
```




### Thank you! 

You can find me on

- [GitHub](https://github.com/s0920832252)
- [Facebook](https://www.facebook.com/fourtune.chen)

若有謬誤 , 煩請告知 , 新手發帖請多包涵

# :100: :muscle: :tada: :sheep: 
