题目描述
给你一个二叉树的根节点 root , 检查它是否轴对称。
思路与算法
对称:左右子树互为镜像
这很显然暗示了一种递归方法
-
确定base case(s)
- 如果 left 和 right 都是 None ,那么它们是镜像的(对称)
- 如果其中一个是 None 而另一个不是,那么它们就不是对称的。
-
拆解问题与定义递归步骤
-
组合子问题的解决方案
- 如果根节点的左子树和右子树是彼此的镜像,则整个树是对称的
代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
# 辅助函数
def isMirror(left: TreeNode, right: TreeNode):
if left is None and right is None:
return True
if left is None or right is None:
return False
return (left.val == right.val) and isMirror(left.left, right.right) and isMirror(left.right, right.left)
if not root:
return True
return isMirror(root.left, root.right)