【LeetCode HOT100】101. 对称二叉树

加载中... 浏览

题目

给你一个二叉树的根节点 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)         # 从根节点的左右孩子开始比较

留言板

加载评论中...
数据结构知识点(三)
【LeetCode HOT100】102. 二叉树的层序遍历
Valaxy v0.28.0-beta.1 驱动|主题-Yunv0.28.0-beta.1