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.
Subscribe to see which companies asked this question
1.递归的代码
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p == NULL && q == NULL)
return true;
else if(p == NULL || q == NULL)
return false;
if(p->val != q->val)
return false;
return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}
更简洁的递归代码:
bool isSameTree(TreeNode* p, TreeNode* q) {
if (p == NULL || q == NULL)
return (p == q);
return (p->val == q->val && isSameTree(p->left, q->left) && isSameTree(p->right, q->right));
}
2.非递归的代码
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p == NULL && q == NULL)
return true;
else if(p == NULL || q == NULL)
return false;
queue<TreeNode*> quep;
queue<TreeNode*> queq;
quep.push(p);
queq.push(q);
while(!quep.empty() && !queq.empty())
{
TreeNode* tempp = quep.front();
TreeNode* tempq = queq.front();
quep.pop();
queq.pop();
if(tempp->val != tempq->val)
{
return false;
}
if(tempp->left != NULL && tempq->left != NULL)
{
quep.push(tempp->left);
queq.push(tempq->left);
}
else if((tempp->left == NULL && tempq->left != NULL) || (tempp->left != NULL && tempq->left == NULL))
return false;
if(tempp->right != NULL && tempq->right != NULL)
{
quep.push(tempp->right);
queq.push(tempq->right);
}
else if((tempp->right == NULL && tempq->right != NULL) || (tempp->right != NULL && tempq->right == NULL))
return false;
}
if(!quep.empty() || !queq.empty())
return false;
return true;
}
更简洁的代码:
bool isSameTree(TreeNode* p, TreeNode* q) {
if(p == NULL && q == NULL)
return true;
else if(p == NULL || q == NULL)
return false;
queue<TreeNode*> quep;
queue<TreeNode*> queq;
quep.push(p);
queq.push(q);
while(!quep.empty() && !queq.empty())
{
TreeNode* tempp = quep.front();
TreeNode* tempq = queq.front();
quep.pop();
queq.pop();
if(tempp->val != tempq->val)
return false;
if(tempp->left != NULL)
quep.push(tempp->left);
if (tempq->left != NULL)
queq.push(tempq->left);
if(quep.size() != queq.size())
return false;
if(tempp->right != NULL)
quep.push(tempp->right);
if(tempq->right != NULL)
queq.push(tempq->right);
if(quep.size() != queq.size())
return false;
}
if(!quep.empty() || !queq.empty())
return false;
return true;
}