题目
给你一个二叉树的根节点 root,检查它是否轴对称。

提示
一句话思路:递归比较「左子树的左节点」和「右子树的右节点」,以及「左子树的右节点」和「右子树的左节点」。
- 从根节点的左右孩子开始,外侧和外侧比、内侧和内侧比,两对都对称才是对称二叉树。
- 递归终止条件:两边都空返回
True;一边空或值不等返回False。 - 时间 O(n)、空间 O(h)(递归栈深度)。
答案
python
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
if not root: # 空树是对称的
return True
def recur(L, R): # 比较左子树的 L 节点和右子树的 R 节点是否对称
if not L and not R: # 两边都为空,对称
return True
if not L or not R or L.val != R.val: # 一边空 或 值不等,不对称
return False
left_ok = recur(L.left, R.right) # 外侧:左的左 和 右的右 比较
right_ok = recur(L.right, R.left) # 内侧:左的右 和 右的左 比较
return left_ok and right_ok # 内外侧都对称才算对称
return recur(root.left, root.right) # 从根节点的左右孩子开始比较
留言板