// 二叉树结构
//struct TreeNode {
// int val;
// struct TreeNode *left;
// struct TreeNode *right;
// };
//判断二叉树是否对称,基本思路:递归遍历,一棵树采用根左右,一棵树采用根右左,
//每次进去判断根节点值是否相等;判断标志sign的值,
//先假设是对称的,遍历是一旦发现不对称,直接让它为0;
void isSameTree1(struct TreeNode* p, struct TreeNode* q,int *sign){
if(p!=NULL&&q!=NULL){//两个指针均不为空,下面的->val才能有意义
if(p->val!=q->val){
*sign=0;
}else{
isSameTree1(p->left,q->right,sign);//p的遍历为根左右,q的遍历为根右左;
isSameTree1(p->right,q->left,sign);
}
}else if(p!=NULL||q!=NULL){//保证一个空,另一个不空 的不符情况 不漏;
*sign=0;
}
}
int isSameTree(struct TreeNode* p, struct TreeNode* q){
int sign=1;//初始化sign,假设它是对称的;
isSameTree1(p,q,&sign);//递归过程中可能会改变sign的值,所以需要传sign的地址进去;
return sign;
}
bool isSymmetric(struct TreeNode* root){
if(root==NULL){//根不为NULL,指向结构成员时才有意义;
return true;
}else {
int i=isSameTree(root->left,root->right);//用sign的返回值判断是否对称;
if(i==1){
return true;
}else{
return false;
}
}
}
C语言:对称二叉树
于 2023-04-13 11:32:02 首次发布