检查是否镜像对称
思路:
终止条件
左右节点为空的情况
左节点为空,右节点不为空,不对称,return false
左不为空,右为空,不对称 return false
左右都为空,对称,返回true
左右节点不为空的情况
比较数值,不相同为 false
单层递归逻辑
比较二叉树的外侧是否对称:左节点的左孩子和右节点的右孩子是否相同
比较二叉树的内侧是否对称:左节点的右孩子和右节点的左孩子是否相同
如果外侧内侧都对称就返回
代码:
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
if not root:
return True
return self.compare(root.left, root.right)
def compare(self, left, right):
#首先排除空节点的情况
if left == None and right != None: return False
elif left != None and right == None: return False
elif left == None and right == None: return True
#排除了空节点,再排除数值不相同的情况
elif left.val != right.val: return False
#此时就是:左右节点都不为空,且数值相同的情况
#此时才做递归,做下一层的判断
outside = self.compare(left.left, right.right) #左子树:左、 右子树:右
inside = self.compare(left.right, right.left) #左子树:右、 右子树:左
isSame = outside and inside #左子树:中、 右子树:中 (逻辑处理)
return isSame