剑指offer-对称的二叉树
题目描述:实现一个函数,用来判断一棵二叉树是不是对称的。如果一个二叉树和它的镜像一样,那么它就是对称的。
题目解析:
这道题首先要先确定什么样的二叉树是对称的,之前我有一些理解上的误解, 认为像(a)这种是对称的。但其实是不对的,因为镜像的话要反过来。
1 1 1
2 2 2 2 7 7
5 6 5 6 5 6 6 5 7 7 7 null
(a) (b) (c)
上面的图只有图(b)符合是对称的二叉树,图c告诉我们需要考虑出现空时的情况。
二叉树前序遍历是 根左右
我们可以自定义遍历方式 根右左
如果是对称的话,得到的结果应该是相同的。
代码(C++实现)
class Solution {
public:
bool isSym(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 isSym(pRoot1->left,pRoot2->right) && isSym(pRoot1->right,pRoot2->left);
}
bool isSymmetrical(TreeNode* pRoot)
{
return isSym(pRoot,pRoot);
}
};