题目描述
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 例如,二叉树 [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示例 1: 输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
解题思路: 递归法
通过递归, 判断传入的左右节点是否同时为空, 如果为空, 说明当前递归是对称的. 如果不为空并且左右节点的val相同, 就递归判断 (l.left, r.right) 和 (l.right, r.left) 是否符合条件
示例代码
def isSymmetric(self, root: TreeNode) -> bool:
def check(l, r):
if not l and not r:
return True
if l and r and l.val == r.val:
return check(l.left, r.right) and check(l.right, r.left)
return False
if not root:
return True
return check(root, root)