题目
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1 | 1 |
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1 | 1 |
示例 1:
1 | 输入:root = [1,2,2,3,4,4,3] |
示例 2:
1 | 输入:root = [1,2,2,null,3,null,3] |
限制:
1 | 0 <= 节点个数 <= 1000 |
题解
达成对称二叉树的条件,也就是互称镜像,所谓镜像就是像照镜子一样,是你的反射,你的左手是镜中的右手,你的右手是镜中的左手。
理解了这里所说的对称,那么我们只需要顺着左右子树递归寻找,判断每一层是否满足镜像条件,如果都满足,那么这棵树就是对称的。
既然需要递归,那么我们首先需要搞清楚递归的退出条件,否则就是无限循环了:
- 左右节点同时为空,说明到各自子树的底部仍然相同,是对称的,可以退出
- 左节点为空时,有节点不为空,说明不对称,可以退出,反过来也是一样
- 左右镜像节点的值不相等,说明长得不一样,不对称,也可以退出
搞明白了递归的退出条件,写出递归函数也就容易多了:
1 | /** |