剑指 Offer 28. 对称的二叉树
- 题目解析
难度简单
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [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
限制:
0 <= 节点个数 <= 1000
- 解法:递归解法
1.当左子树不存在或者右子树不存在时,或者左右节点值不相等时,则不是对称的
2.当左右子树均不存在时,是对称的
3.递归调左右子树分别是否是对称的,当只有左右子树均对称的,这颗树才对称
class Solution: def isSymmetric(self, root: TreeNode) -> bool: def recur(L, R): if not L and not R: return True if (L and not R) or (R and not L): return False if L and R and L.val != R.val: return False return recur(L.left, R.right) and recur(L.right, R.left) return recur(root.left, root.right) if root else True
或者这样
class Solution: def isSym(self, leftTree, rightTree): if not leftTree and not rightTree: return True elif (not leftTree and rightTree) or (not rightTree and leftTree): return False elif leftTree.val != rightTree.val: return False return self.isSym(leftTree.left, rightTree.right) & self.isSym(leftTree.right, rightTree.left) def isSymmetric(self, root: TreeNode) -> bool: if not root: return True else: return self.isSym(root.left, root.right)

浙公网安备 33010602011771号