题目
思路
判断一颗二叉树是否对称,只需要判断它的左右子树是否轴对称,但是这道题给的接口函数的参数只有一个,所以我们需要创建一个具有两个参数的函数接收左右子树,该函数用来判断左右子树是否轴对称。
🔨可以通过递归判断左右子树是否轴对称。
递归的2个必要条件
①大问题能够转换为小问题---判断a、b子树是否对称可以判断a子树的左子树是否和b的右子树对称,a的右子树是否和b的左子树对称
②递归存在终止条件----若左树的根节点和右数的根节点值不相等则返回false;左子树为空右子树不为空或者右子树为空左子树不为空返回false;左右子树都为空返回true。
代码
typedef struct TreeNode BTNode;
bool _isSymmetric(BTNode* root1, BTNode* root2)
{
//两边都是空满足对称要求
if (root1 == NULL && root2 == NULL)
return true;
//一边为空另一边不为空不满足对称
if (root1 == NULL && root2 != NULL || root1 != NULL && root2 == NULL)
return false;
//对称节点不相等
if (root1->val != root2->val)
return false;
//左树的左子树喝右数的右子树相等并且左树的右子树和又树的左子树相等
return _isSymmetric(root1->left, root2->right) && _isSymmetric(root1->right, root2->left);
}
bool isSymmetric(struct TreeNode* root){
return _isSymmetric(root->left, root->right);
}