给定一个二叉树,检查它是否是镜像对称的。
在这里先解释一下镜像对称的概念,顾名思义,就像人站在镜子前面面对自己一样,看到的一切都是对称的。镜中的反射与现实中的人具有相同的头部,但反射的右臂对应于人的左臂,反之亦然。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
解答
方法一:(递归)
我们可以这么想,如果一棵树的左子树和右子树镜像对称的话,那么这棵树一定是镜像对称的,例如下面这棵树:
那么这样一来,我们可以把问题转化为两棵树在什么情况下互为镜像?
如果两棵树满足以下条件则互为镜像:
1.它们的两个根结点具有相同的值。
2.每个树的右子树都与另一个树的左子树镜像对称。
例如下面:
代码如下:
bool isMirror(struct TreeNode *t1,struct TreeNode *t2)
{
if(t1==NULL&&t2==NULL) return true;
if(t1==NULL||t2==NULL) return false;
return ((*t1).val == (*t2).val) && (isMirror((*t1).right, (*t2).left)) && (isMirror((*t1).left, (*t2).right));
}
bool isSymmetric(struct TreeNode *root) {
return isMirror(root,root);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)