language: C
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
//
bool isSymmetric(struct TreeNode* root){
if(root ==NULL)
return true;
// 判断两个节点是否一样
bool same(struct TreeNode* a, struct TreeNode* b){
if((a==NULL)&&(b==NULL))
return true;
if((a== NULL)||(b==NULL))
return false;
if(a->val == b->val)
return true;
return false;
}
bool ans=true; // 答案
// 同步遍历左右子树,并且镜像的判断是否一样,一旦不一样,就把ans 改成false然后返回,在每个返回的地方都判断一下ans
// 左子树根填a的位置,右子树根填b的位置
void check(struct TreeNode* a, struct TreeNode* b){
if(!ans)
return;
if(!same(a,b)){
ans = false;
return;
}
if(a !=NULL){
check(a->left,b->right);
if(!ans)
return;
check(a->right,b->left);
}
}
check(root->left,root->right);
return ans;
}