一、题目链接
https://leetcode-cn.com/problems/symmetric-tree/
二、题目思路
给你一个二叉树的根节点 root
, 检查它是否轴对称的思路:
1.将该树的左子树和右子树,当做两棵树,调用 判断两棵树是否对称相等的函数
2.判断两颗树是否对称相等的函数,其实就是先判断两颗树的根结点是否相等,再将一棵树的左孩子结点和另一棵树的右子树结点比较相等,将一棵树的右子树,和另一颗树的左子树比较相等
3.每个结点的左右孩子结点都要综合判断,这样就达到了是否对称的判断
三、题解代码
// 判断两颗树是否对称相等的函数
//其实就是将一棵树的左孩子结点和另一棵树的右子树结点比较相等
//将一棵树的右子树,和另一颗树的左子树比较相等
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->right)&&isSameTree(p->right,q->left);
}
bool isSymmetric(struct TreeNode* root) {
//将该树的左子树和右子树,当做两棵树,调用 判断两棵树是否对称相等的函数
return isSameTree(root->left,root->right);
}