###### tags: `Leetcode` `easy` `tree` `python` `c++`
# 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.
## 解題思路:
遞迴比較root.val、左子、右子
## Python:
``` python=
class TreeNode(object):
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def insertLeft(self,node):
if self.left==None:
self.left=TreeNode(node)
else:
self.left.insertLeft(node)
def insertRight(self,node):
if self.right==None:
self.right=TreeNode(node)
else:
self.right.insertRight(node)
def printTree(self):
root=self
stack=[root]
res=[]
while stack:
root=stack.pop(0)
res.append(root.val)
if root.left:
stack.append(root.left)
if root.right:
stack.append(root.right)
print(res)
class Solution(object):
def isSameTree(self, p, q):
"""
:type p: TreeNode
:type q: TreeNode
:rtype: bool
"""
if not p and not q:
return True
if not p or not q:
return False
if p.val==q.val:
return self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right)
return False
p=TreeNode(1)
p.insertLeft(2)
p.insertRight(3)
q=TreeNode(1)
q.insertLeft(2)
q.insertRight(3)
result=Solution()
ans=result.isSameTree(p,q)
print(ans)
```
## C++:
``` cpp=
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
struct TreeNode{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(): val(0), left(nullptr), right(nullptr) {}
TreeNode(int x): val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right): val(x), left(left), right(right) {}
};
void insertLeft(TreeNode *root, int data){
TreeNode *tmp=root;
while (tmp->left != nullptr){
tmp=tmp->left;
}
TreeNode *new_left=new TreeNode(data);
tmp->left=new_left;
}
void insertRight(TreeNode *root,int data){
TreeNode *tmp=root;
while (tmp->right != nullptr){
tmp=tmp->right;
}
TreeNode *new_right= new TreeNode(data);
tmp->right= new_right;
}
void printTree(TreeNode *root){
TreeNode *tmp=root;
queue<TreeNode *> que;
vector<int> res;
que.push(tmp);
while ( !que.empty()){
TreeNode *cur=que.front();
que.pop();
res.push_back(cur->val);
if (cur->left)
que.push(cur->left);
if (cur->right)
que.push(cur->right);
}
for (int i=0; i<res.size(); i++){
cout<<res[i]<<" ";
}
cout<<endl;
}
class Solution{
public:
bool isSameTree(TreeNode *p, TreeNode *q){
if (p==nullptr && q==nullptr)
return true;
if (!p || !q)
return false;
if (p->val == q->val){
return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
}
return false;
}
};
int main(){
TreeNode *p = new TreeNode(1);
insertLeft(p,2);
insertRight(p,3);
cout<<"Tree P:";
printTree(p);
TreeNode *q = new TreeNode(1);
insertLeft(q,2);
insertRight(q,3);
cout<<"Tree Q:";
printTree(q);
Solution res;
bool ans=res.isSameTree(p,q);
cout<<ans<<endl;
cout<<"Time Space:O(N)";
return 0;
}
```