题目: 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
思路:
判断一棵二叉树是不是对称的,等价于判断其左右子树是不是镜像对称的。
判断对称即判断对称的位置上的元素是否相等。
两个结点对称等价于:
- 两个结点存储的值相等;
- 结点A的左子树结点和结点B的右子树结点是对称的;
- 结点A的右子树结点和结点B的左子树结点是对称的。
注意:在遍历的二叉树时,需要将遇到的空指针考虑在内。
在线oj:
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot)
{
return _isSymmetrical(pRoot,pRoot);
}
bool _isSymmetrical(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 _isSymmetrical(pRoot1->left, pRoot2->right) \
&& _isSymmetrical(pRoot1->right, pRoot2->left);
}
};