关于树的递归问题,永远考虑两方面:返回条件和子问题
- 先考虑返回条件,如果当前的根节点不相同,那就返回false(注意,不要判断相等时返回什么,因为当前相等并不能说明后面节点相等,所以要转换为不相等返回什么)
- 但是还要考虑为空的情况,如果两个树的根节点都为空,则返回true(只有经过层层比较,当比较到最后都为空树时,才返回true);如果一个为空一个不为空,则返回false
- 最后考虑子问题,当前树的根节点比较完毕,那就转化为左子树和右子树进行递归比较
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{
if (p == NULL && q == NULL)
{
return true;
}
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);
}