二叉树的核心是递归,因此我们只讨论第一层二叉树的情况。
首先讨论特殊值,空树为其自身的镜像,对称;若有左子树没有右子树,或相反,则不对称;若只有根节点,对称。
再来说一般情况,如果有左右子树,那么如果左右子树根节点值不同,则不对称。若相同,则需左子树的左子树根=右子树的右子树根,且左子树的右子树根=右子树的左子树跟。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int Check(struct TreeNode* left,struct TreeNode* right)
{ //先判断一些特殊情况,即左右分别是否为空
if(left == NULL && right != NULL)
return 0;
if(left != NULL && right == NULL)
return 0;
if(left == NULL && right == NULL)
return 1;
if(left->val == right->val) //如果左根的值等于右根的值,去检测他们的子树
return (Check(left->left,right->right) && Check(left->right,right->left));
else
return 0;
}
bool isSymmetric(struct TreeNode* root){
if(root==NULL)//如果是空树,空树一定为自身的镜像
return 1;
return Check(root->left,root->right);//返回比较的布尔值
}