题解 | #对称的二叉树#
对称的二叉树
http://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return bool布尔型
*/
//递归检查是否对称
bool check(struct TreeNode* rchild,struct TreeNode* lchild){
//如果right是空,则left也空才是对称,否则不对称
if(rchild==NULL){
if(lchild==NULL){
return 1;
}else{
return 0;
}
}
//如果left是空,则right也空才是对称,否则不对称
if(lchild==NULL){
if(rchild==NULL){
return 1;
}else{
return 0;
}
}
//如果right和left都不是空且他们两个值相等,递归比较
if(rchild->val==lchild->val){
//比较右儿子的右与左儿子的左,和,右儿子的左与左儿子的右是不是对称
return check(rchild->right,lchild->left) && check(rchild->left,lchild->right);
}
return 0;//如果right和left的值不相等,则不对称
}
bool isSymmetrical(struct TreeNode* pRoot ) {
// 空树是对称树
if(pRoot==NULL){
return 1;
}
return check(pRoot->right,pRoot->left);
}