实则是 菜鸡一枚。。。先镜像,然后复制,然后比较 两树是否相等。。。代码贴上,去学习大佬的代码了
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot)
{
TreeNode* mirroroot=treeCopy(pRoot);
mirror(pRoot);
return doesAandB(pRoot,mirroroot);
}
TreeNode *treeCopy(TreeNode* root) //复制二叉树
{
if(root==NULL)
return NULL;
TreeNode *c=new TreeNode(root->val);
c->left=treeCopy(root->left);
c->right=treeCopy(root->right);
return c;
}
void mirror(TreeNode* pRoot) //找二叉树的镜像
{
if(pRoot==NULL)
return ;
if(pRoot->left!=NULL && pRoot->right!=NULL)
{
TreeNode *temp=pRoot->left;
pRoot->left=pRoot->right;
pRoot->right=temp;
}
else if(pRoot->left!=NULL && pRoot->right==NULL)
{
pRoot->right=pRoot->left;
pRoot->left=NULL;
}
else if(pRoot->right!=NULL && pRoot->left==NULL)
{
pRoot->left=pRoot->right;
pRoot->right=NULL;
}
else
return ;
mirror(pRoot->left);
mirror(pRoot->right);
}
bool doesAandB(TreeNode* pRoot,TreeNode* mirrorRoot) //判断二叉树是否相等
{
if(pRoot==NULL && mirrorRoot==NULL)
return true;
else if(pRoot==NULL && mirrorRoot!=NULL)
return false;
else if(pRoot!=NULL && mirrorRoot==NULL)
return false;
if(pRoot->val!=mirrorRoot->val)
return false;
return doesAandB(pRoot->left,mirrorRoot->left)&&doesAandB(pRoot->right,mirrorRoot->right);
}
};


京公网安备 11010502036488号