题目(力扣):
判断二叉树是否相同,就需要分别看他们的左节点和右节点是否分别相同。
注意:左右节点不可弄反(如,p的左节点和q的右节点比较......)
首先,先判断他的特殊情况:
比如,当两颗数的root节点都为NULL时,就可以return true了。
if (p == NULL && q == NULL)
{
return true;
}
接着,就可以看两棵树中是否一棵树中的选中节点为空,而另一棵树的选中节点却不为空时,就可以判断出其不是相同树了。
else if (p == NULL || q == NULL)
{
return false;
}
然后,就可以去看正常情况了(也就是题目所述),判断节点中的数据是否相同,由于要判断完整个二叉树的数据,所以不能在前面就直接返回true,因此,使用其相反的去做判断。
else if (p->val != q->val)
{
return false;
}
最后,就是利用递归遍历整棵树,依次做判断。
else
{
return isSameTree(p->left, q->left)
&& isSameTree(p->right, q->right);
}
题目的提交:
完整代码:
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
if (p == NULL && q == NULL)
{
return true;
}
else if (p == NULL || q == NULL)
{
return false;
}
else if (p->val != q->val)
{
return false;
}
else
{
return isSameTree(p->left, q->left)
&& isSameTree(p->right, q->right);
}
}