一:题目
本题只需在此题上稍作修改即可:力扣经典题目之->相同的树(递归判断两颗二叉树是否相同)-CSDN博客
二:代码
解释:
1:对称二叉树本质就是左右子树的对比,但不是左孩子和左孩子相比,右孩子和右孩子相比,这样的话就是比较时候为相同的树,而是左子树的左孩子和右子树的右孩子相比,左子树的右孩子和右子树的左孩子相比。
2:isSymmetric函数进行就直接给isMirror函数穿左右孩子,是因为题目告知二叉树不可能为空。
源代码:
//检查两棵树是否互为镜像的函数
bool isMirror(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 isMirror(p->left,q->right) && isMirror(p->right,q->left);
}
//检查树是否对称的函数
bool isSymmetric(struct TreeNode* root) {
// 使用isMirror函数比较左子树和右子树的镜像
return isMirror(root->left,root->right);
}