题意:判定两颗二叉树是否相同
非递归的写法就是bfs逐层遍历
递归:
class Solution{
public:
bool isSameTree(TreeNode *p, TreeNode *q){
if(p == NULL && q != NULL)
return false;
if(p != NULL && q == NULL)
return false;
if(p == NULL && q == NULL)
return true;
if(p->val != q->val)
return false;
return(isSameTree(p->left, q->left) && isSameTree(p->right, q->right));
}
};
非递归:
class Solution{
public:
bool isSameStruct(TreeNode *p, TreeNode *q){//判断两个节点结构是否相同
if(p == NULL && q != NULL)
return false;
if(q != NULL && q == NULL)
return false;
return true;
}
bool isSameTree(TreeNode *p, TreeNode *q){
if(p == NULL && q != NULL)
return false;
if(p != NULL && q == NULL)
return false;
if(p == NULL && q == NULL)
return true;
int pTree = 1, qTree = 1;
queue<TreeNode *> P, Q;
P.push(p); Q.push(q);
while(!P.empty() && !Q.empty()){
TreeNode *pTreeNode = P.front(); P.pop();
TreeNode *qTreeNode = Q.front(); Q.pop();
if(pTreeNode != NULL && qTreeNode != NULL){
if(pTreeNode->val != qTreeNode->val)
return false;
if(!isSameStruct(pTreeNode->left, qTreeNode->left))
return false;
if(!isSameStruct(pTreeNode->right, qTreeNode->right))
return false;
if(pTreeNode->left != NULL){
P.push(pTreeNode->left);
Q.push(qTreeNode->left);
}
if(pTreeNode->right != NULL){
P.push(pTreeNode->right);
Q.push(qTreeNode->right);
}
}
}
return true;
}
};