1、题目来源:100. Same Tree
2、题目:
Given two binary trees, write a function to check if they are equal or not.
Two binary trees are considered equal if they are structurally identical and the nodes have the same value.
3、思路:1)BFS遍历两棵树;
2)一旦结构不同(对应的一个节点为空,一个节点不为空),不同直接返回false;
3)如果结构相同(),比较值是否相同,不同直接返回false;
4、我的源代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSameTree(TreeNode* p, TreeNode* q) {
bool flag=true;
queue<TreeNode*> que1,que2;
que1.push(p);
que2.push(q);
if(p==NULL&&q==NULL)
return true;
while(!que1.empty()||!que2.empty()){
if((que1.front()==NULL&&que2.front()!=NULL)||(que1.front()!=NULL&&que2.front()==NULL)){
return false;
}
else if(que1.front()->val!=que2.front()->val)
return false;
int i,n=que1.size()>que2.size()?que1.size():que2.size();
// cout<<"n="<<n<<endl;
for(i=0;i<n;i++){
TreeNode*node1=que1.front();
que1.pop();
TreeNode*node2=que2.front();
que2.pop();
if((node1->left==NULL&&node2->left!=NULL)||(node1->left!=NULL&&node2->left==NULL))
return false;
else if(node1->left!=NULL&&node2->left!=NULL){
if(node1->left->val!=node2->left->val)
return false;
else{
que1.push(node1->left);
que2.push(node2->left);
}
}
if((node1->right==NULL&&node2->right!=NULL)||(node1->right!=NULL&&node2->right==NULL))
return false;
else if(node1->right!=NULL&&node1->right!=NULL){
if(node1->right->val!=node2->right->val)
return false;
else{
que1.push(node1->right);
que2.push(node2->right);
}
}
}
}
return flag;
}
};
5、讨论区的精彩代码(自己也不错啦#_3,3_#加油~),递归的力量啊(来源: 点击打开链接)
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p==NULL&&q==NULL) return true;
if(p==NULL&&q!=NULL||p!=NULL&&q==NULL||p->val!=q->val) return false;
return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}