[28]对称二叉树
题目
请实现一个函数,用来判断一颗二叉树是不是对称的,如果一颗二叉树和它的镜像一样,那么它是对称的。
下图中3棵二叉树,第一棵二叉树是对称的,另外两棵不是
思路
两个子树互为镜像当且仅当
- 两个子树的根节点值相等
- 第一棵子树的左子树和第二棵子树的右子树互为镜像,且第一棵子树的右子树和第二棵子树的左子树互为镜像;
代码
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot)
{
return isSy(pRoot, pRoot);
}
bool isSy(TreeNode* pRoot1, TreeNode* pRoot2)
{
if(pRoot1==NULL && pRoot2==NULL)
return true;
if(pRoot1==NULL || pRoot2==NULL)
return false;
if(pRoot1->val != pRoot2->val) return false;
return isSy(pRoot1->left, pRoot2->right) &&isSy(pRoot1->right,pRoot2->left);
}
};