题目
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
示例
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1
/ \
2 2
\ \
3 3
想法
首先,我们看该树的根结点是否为空,如果为空,我们直接返回true。如不是,我们进行下一步.在考虑下一步,我们要知道镜像对称的二叉树的性质,镜像对称二叉树的左子树和右子树是互相对称的,所以我们假如两个指针,一个指针指向左子树,一个指针指向右子树,先考虑特殊情况来避免不需要的运算,如果两个指针指向皆空,那么返回true,如果有一个为空,那么返回flase,然后进入正常阶段判断指针指向子树的根结点是否相同,不同返回flase,返回则判断他们的右子树和左子树是否交叉相等.,如果相等那么便是镜像对称树.
代码实现
class Solution {
public:
bool haha(TreeNode* l, TreeNode* r)
{
if(!l && !r ) return true;
if(!l || !r ) return false;
if(l -> val != r -> val) return false;
ret