bool isSameTree(TreeNode* p,TreeNode* q){
if(p==nullptr&&q==nullptr) return true;
else if(p==nullptr||q==nullptr) return false;
queue<TreeNode *> P,Q;
P.push(p);
Q.push(q);
while((!Q.empty())&&(!P.empty())){
TreeNode *node1=P.front(); P.pop();
TreeNode *node2=Q.front(); Q.pop();
TreeNode *leftNode1=node1->left;
TreeNode *leftNode2=node2->left;
TreeNode *rightNode1=node1->right;
TreeNode *rightNode2=node2->right;
if(node1->val!=node2->val) return false;
else if(leftNode1==nullptr^leftNode2==nullptr) return false;
else if(rightNode1==nullptr^rightNode2==nullptr) return false;
if(leftNode1!=nullptr) P.push(leftNode1);
if(rightNode1!=nullptr) P.push(rightNode1);
if(leftNode2!=nullptr) Q.push(leftNode2);
if(rightNode2!=nullptr) Q.push(rightNode2);
}
return(!(Q.empty()^P.empty()));
}
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p==nullptr&&q==nullptr) return true;
else if(p==nullptr||q==nullptr) return false;
else if(p->val!=q->val) return false;
else return(isSameTree(p->left,q->left)&&isSameTree(p->right,q->right));
}