题解:
首先我们要清楚,对称二叉树,比较的不是左右节点,而是根节点的左右子树是不是相互翻转的。比较的是两个树。就是说左子树的左节点和右子树的右节点做比较,左子树的右节点和右子树的左节点做比较。
我们使用递归方法。
1.递归函数的参数和返回值
前面已经说过了,比较的是两个树,自然是左子树和右子树节点
返回值是bool类型
compare(left, right)
2.终止条件
节点为空的情况
节点不为空的情况
3.单层递归逻辑
# 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 compare(left, right):
if not left and right:
return False
elif left and not right:
return False
elif not left and not right:
return True
elif left.val != right.val:
return False
outsides = compare(left.left, right.right)
inside = compare(left.right, right.left)
return outsides and inside
if not root:
return True
return compare(root.left, root.right)