给你一个二叉树的根节点root 检查它是否轴对称。示例 1输入root [1,2,2,3,4,4,3]输出true示例 2输入root [1,2,2,null,3,null,3]输出false提示树中节点数目在范围[1, 1000]内-100 Node.val 100解题思路判断二叉树是否轴对称的核心是判断左右子树是否镜像对称满足以下条件节点值相等左右两个对应节点的值必须相同子树镜像左节点的左子树与右节点的右子树镜像左节点的右子树与右节点的左子树镜像。递归思路用辅助函数_is_mirror比较两个子树边界两个节点都为空则对称一个为空、一个不为空则不对称递归值相等时继续比较左的左与右的右、左的右与右的左。Python代码from typing import Optional, List, Deque from collections import deque # 二叉树节点定义 class TreeNode: def __init__(self, val0, leftNone, rightNone): self.val val self.left left self.right right class Solution: def isSymmetric(self, root: Optional[TreeNode]) - bool: # 空树直接对称 if not root: return True # 递归判断左右子树是否镜像对称 return self._is_mirror(root.left, root.right) def _is_mirror(self, left: Optional[TreeNode], right: Optional[TreeNode]) - bool: 辅助函数判断两个子树是否镜像对称 # 两个节点都为空 → 对称 if not left and not right: return True # 一个为空、一个不为空 → 不对称 if not left or not right: return False # 节点值相等且左的左与右的右镜像、左的右与右的左镜像 → 对称 return (left.val right.val) and \ self._is_mirror(left.left, right.right) and \ self._is_mirror(left.right, right.left) # ---------------------- 测试辅助函数 ---------------------- def build_tree(nums: List[Optional[int]]) - Optional[TreeNode]: 层序遍历构建二叉树完全适配LeetCode的二叉树数组表示法 :param nums: 数组None表示空节点如[1,2,2,3,4,4,3]、[1,2,2,None,3,None,3] :return: 构建好的二叉树根节点 if not nums or nums[0] is None: return None root TreeNode(nums[0]) queue: Deque[TreeNode] deque([root]) idx 1 # 从第二个元素开始遍历 while queue and idx len(nums): cur_node queue.popleft() # 构建左子节点 if nums[idx] is not None: cur_node.left TreeNode(nums[idx]) queue.append(cur_node.left) idx 1 # 构建右子节点注意边界防止数组越界 if idx len(nums) and nums[idx] is not None: cur_node.right TreeNode(nums[idx]) queue.append(cur_node.right) idx 1 return root def print_tree(root: Optional[TreeNode]) - List[Optional[int]]: 层序遍历打印二叉树转回数组方便直观查看树结构 :param root: 二叉树根节点 :return: 层序遍历的数组末尾无多余None if not root: return [] res [] queue: Deque[TreeNode] deque([root]) while queue: cur_node queue.popleft() if cur_node: res.append(cur_node.val) queue.append(cur_node.left) queue.append(cur_node.right) else: res.append(None) # 移除末尾的空节点让结果更整洁 while res and res[-1] is None: res.pop() return res # ---------------------- 测试用例 ---------------------- if __name__ __main__: # 初始化解法对象 sol Solution() # 测试用例1对称二叉树LeetCode示例1 nums1 [1, 2, 2, 3, 4, 4, 3] root1 build_tree(nums1) print(f测试用例1 - 原树结构{print_tree(root1)}) print(f测试用例1 - 是否对称{sol.isSymmetric(root1)}) # 预期True # 测试用例2非对称二叉树LeetCode示例2 nums2 [1, 2, 2, None, 3, None, 3] root2 build_tree(nums2) print(f\n测试用例2 - 原树结构{print_tree(root2)}) print(f测试用例2 - 是否对称{sol.isSymmetric(root2)}) # 预期False # 测试用例3空树边界情况 nums3 [] root3 build_tree(nums3) print(f\n测试用例3 - 原树结构{print_tree(root3)}) print(f测试用例3 - 是否对称{sol.isSymmetric(root3)}) # 预期True # 测试用例4只有根节点的树边界情况 nums4 [5] root4 build_tree(nums4) print(f\n测试用例4 - 原树结构{print_tree(root4)}) print(f测试用例4 - 是否对称{sol.isSymmetric(root4)}) # 预期True # 测试用例5两层对称二叉树 nums5 [10, 6, 6] root5 build_tree(nums5) print(f\n测试用例5 - 原树结构{print_tree(root5)}) print(f测试用例5 - 是否对称{sol.isSymmetric(root5)}) # 预期TrueLeetCode提交代码# Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution: def isSymmetric(self, root: Optional[TreeNode]) - bool: # 空树直接对称 if not root: return True # 递归判断左右子树是否镜像对称 return self._is_mirror(root.left, root.right) def _is_mirror(self, left: Optional[TreeNode], right: Optional[TreeNode]) - bool: 辅助函数判断两个子树是否镜像对称 # 两个节点都为空 → 对称 if not left and not right: return True # 一个为空、一个不为空 → 不对称 if not left or not right: return False # 节点值相等且左的左与右的右镜像、左的右与右的左镜像 → 对称 return (left.val right.val) and \ self._is_mirror(left.left, right.right) and \ self._is_mirror(left.right, right.left)程序运行结果展示测试用例1 - 原树结构[1, 2, 2, 3, 4, 4, 3] 测试用例1 - 是否对称True 测试用例2 - 原树结构[1, 2, 2, None, 3, None, 3] 测试用例2 - 是否对称False 测试用例3 - 原树结构[] 测试用例3 - 是否对称True 测试用例4 - 原树结构[5] 测试用例4 - 是否对称True 测试用例5 - 原树结构[10, 6, 6] 测试用例5 - 是否对称True总结本文探讨如何判断二叉树是否轴对称。核心思路是递归比较左右子树是否镜像对称对应节点值必须相等且左节点的左子树与右节点的右子树、左节点的右子树与右节点的左子树均需对称。Python实现通过辅助函数_is_mirror递归验证这些条件并处理边界情况如空树或单节点树。测试用例验证了对称树如[1,2,2,3,4,4,3]和非对称树如[1,2,2,None,3,None,3]的正确性最终提交代码符合LeetCode要求。