题目:给定两个二叉树,编写一个函数来检验它们是否相同。
如果两个数在结构上相同,并且节点就有相同的值,则认为它们是相同的。
#include <queue>
struct TreeNode
{
int val;
struct TreeNode* left;
struct TreeNode* right;
};
static bool isSameTree(struct TreeNode* p,struct TreeNode* q)
{
if (p != NULL && q != NULL)
{
if (p->val != q->val)
{
return false;
}
if (!isSameTree(p->left, q->left))
{
return false;
}
if (!isSameTree(p->right, q->right))
{
return false;
}
}
else
return p == q;
return true;
}
static bool isSameTree2(struct TreeNode* p, struct TreeNode* q)
{
queue<TreeNode*> q1, q2;
q1.push(p);
q2.push(q);
while (q1.size() > 0 && q2.size() > 0)
{
TreeNode* p1 = q1.front();
q1.pop();
TreeNode* p2 = q2.front();
q2.pop();
if(!p1 && !p2) continue;
if (!p1 || !p2) return false;
if (p1->val != p2->val) return false;
q1.push(p1->left);
q2.push(p2->left);
q1.push(p1->right);
q2.push(p2->right);
}
return true;
}
int main()
{
printf("%s\n",isSameTree(NULL,NULL)? "true":"false");
system("pause");
return 0;
}