class Solution {
public:
/*
对于一颗二叉树,从根节点开始遍历
如果左右节点有一个为NULL,那么肯定不是对称二叉树
如果左右子节点均不为空,但不相等,那么肯定不是对称二叉树
如果左右子节点均不为空且相等,那么:
遍历左子树,遍历顺序为,当前节点,左子树,右子树
遍历右子树,遍历顺序为,当前节点,右子树,左子树
如果遍历左子树的序列和遍历右子树的序列一样,则称该二叉树为对称二叉树
*/
bool isSymmetrical(TreeNode* pRoot)
{
if(pRoot==NULL)
return true;
return isMirror(pRoot->left,pRoot->right);
}
bool isMirror(TreeNode *pLeft,TreeNode *pRight){
if(pLeft==NULL&&pRight==NULL)
return true;
if(pLeft==NULL||pRight==NULL)
return false;
if(pLeft->val!=pRight->val)
return false;
return isMirror(pLeft->left,pRight->right)&&isMirror(pLeft->right,pRight->left);
}
};
class Solution {
public:
/*
对于一颗二叉树,从根节点开始遍历
如果左右节点有一个为NULL,那么肯定不是对称二叉树
如果左右子节点均不为空,但不相等,那么肯定不是对称二叉树
如果左右子节点均不为空且相等,那么:
遍历左子树,遍历顺序为,当前节点,左子树,右子树
遍历右子树,遍历顺序为,当前节点,右子树,左子树
如果遍历左子树的序列和遍历右子树的序列一样,则称该二叉树为对称二叉树
*/
bool isSymmetrical(TreeNode* pRoot)
{
if(pRoot==NULL)
return true;
return isMirror(pRoot->left,pRoot->right);
}
bool isMirror(TreeNode *pLeft,TreeNode *pRight){
if(pLeft==NULL&&pRight==NULL)
return true;
if(pLeft==NULL||pRight==NULL)
return false;
if(pLeft->val!=pRight->val)
return false;
return isMirror(pLeft->left,pRight->right)&&isMirror(pLeft->right,pRight->left);
}
};