分析:如果一颗树的左子树和右子树镜像对称,那么这棵树一定时对称二叉树 《=====》问题转化为两颗树,在满足什么条件时,互为镜像;
条件两个:
1 它们两个的跟节点具有相同的值;
2 每颗树的左子树与每颗树的右子树相同;
二叉树 [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
# definition for a binary tree node
struct treenode {
int val;
struct treenode *left;
struct treenode *right;
};
bool isMirror(struct treenode *t1, struct treeneode *t2)
{
// 两个初始判断条件 ---- 两个初始条件 判断四种情况
if (t1 == NULL && t2 == NULL) return true;
if (t1 ==NULL || t2 == NULL) return false;
// 三个由前向后递归的条件 ------ 缺一不可
return ((*t1).val == (*t2).val)) &&(isMirror(t1.left , t2.right) && (isMirror(t1.right, t2.left);
}
bool isSymmetric( struct treenoed *root)
{
return isMirror(root, root);
}