赞
踩
- // 二叉树结构
- //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;
- }
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。