题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
//由题意知道,对称,表示的是镜像相等。则有左子树是镜像,右子树也是镜像。
//判断镜像可以一层一层的判断,先判断结构是否相等,即根节点是否都不为空,再
//则判断根是否相等,相等,则本层是镜像的,继续向下判断左右子树,右子树是否
//是另一个根节点左子树的镜像,左子树是否是另一个根节点右子树的镜像。
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot)
{
return isSymmetrical(pRoot,pRoot);
}
bool isSymmetrical(TreeNode* t1,TreeNode* t2)
{
if(t1==NULL&&t2==NULL)return true;
else if(t1==NULL||t2==NULL)return false;
else{
if(t1->val!=t2->val)return false;
else return isSymmetrical(t1->left,t2->right)&&isSymmetrical(t1->right,t2->left);
}
}
};