题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
struct BinaryTreeNode
{
int val;
BinaryTreeNode* left;
BinaryTreeNode* right;
};
bool isSymmetrical(BinaryTreeNode* pRoot)
{
return IsSymmetrical(pRoot, pRoot);
}
bool IsSymmetrical(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2)
{
//若两个结点同时为nullptr时返回true,一个为nullptr一个不为空则返回false
if (pRoot1 == nullptr&&pRoot2 == nullptr)
return true;
if (pRoot1 == nullptr || pRoot2 == nullptr)
return false;
//若两个结点元素不相等则返回false
if (pRoot1->val != pRoot2->val)
return false;
//继续对称递归pRoot1的左结点和pRoot2的右结点、pRoot1的右结点和pRoot2的左结点
return IsSymmetrical(pRoot1->left, pRoot2->right) && IsSymmetrical(pRoot1->right, pRoot2->left);
}