您的位置:首页 > 其它

100. Same Tree和判断一个树是不是对称的思想一样

2017-01-12 16:49 441 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐