【LeetCode刷题】对称二叉树
给你一个二叉树的根节点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要求。

相关新闻

用自然语言探索单细胞数据的AI工具

用自然语言探索单细胞数据的AI工具

用自然语言进行单细胞探索 | 《自然-方法》 生物学家若要探索如今无处不在的高通量组学数据(例如单细胞RNA测序生成的数据),学习R或Python等编程语言来运行软件几乎是必须的。然而,随着人工智能的突破,一种替代范式现在…

2026/7/5 2:31:58 阅读更多 →
k8s静态pod

k8s静态pod

静态 Pod 其实很好理解:它就是“这台节点自己养的 Pod”。我们平时用 kubectl apply 创建的 Pod,是先写进 API Server,再由调度器挑节点、控制器去拉起;那静态 Pod 走的路完全不一样——它直接由 kubelet 在本机创建和保活&#x…

2026/7/3 14:38:49 阅读更多 →
React Native for OpenHarmony:井字棋游戏的开发与跨平台适配实践

React Native for OpenHarmony:井字棋游戏的开发与跨平台适配实践

井字棋游戏的开发与跨平台适配实践 摘要1. 引言:为何选择井字棋作为 RNOH 游戏开发示例?2. 技术栈与开发环境2.1 核心依赖版本2.2 OpenHarmony 开发环境 3. 游戏核心数据模型与状态管理3.1 类型定义3.2 胜负判定算法 4. 核心交互逻辑实现4.1 格子点击处理…

2026/7/3 14:38:50 阅读更多 →

最新新闻

了解并使用MVVM框架

了解并使用MVVM框架

到底有哪些开源MVVM框架? 前面介绍了WPF的基本概念和一些相关知识,我们了解到开发WPF应用程序可以使用现成的框架和模式,最为合适的莫过于时下正热的MVVM模式,所以这里我们也列出针对MVVM模式的已有开源框架: 图3 上面…

2026/7/5 2:28:37 阅读更多 →
原来网站排名还能“买”到?

原来网站排名还能“买”到?

在传统SEO时代,网站排名确实可以通过竞价排名(SEM)直接“购买”关键词位置,但那种模式本质是付费买流量,一旦停止付费,排名瞬间消失。而在GEO(生成式引擎优化)时代,所谓的…

2026/7/5 2:26:36 阅读更多 →
告别技术空谈:九尾狐AI发布2026年最新企业AI培训体系,主推‘战略到变现‘全周期陪跑模式

告别技术空谈:九尾狐AI发布2026年最新企业AI培训体系,主推‘战略到变现‘全周期陪跑模式

AI短视频矩阵运营:2026企业培训如何实现从战略到变现的全周期陪跑 作为一名长期在一线协助中小企业落地AI应用的博主,我见过太多这样的场景:老板花大价钱请了团队做培训,员工课上听得热血沸腾,回到工位却无从下手&…

2026/7/5 2:26:36 阅读更多 →
西门子S7-1200 PLC轴运动控制配置与优化指南

西门子S7-1200 PLC轴运动控制配置与优化指南

1. 西门子S7-1200 PLC轴运动控制基础架构在工业自动化领域,轴运动控制是PLC应用中最具挑战性的任务之一。西门子S7-1200系列PLC凭借其紧凑的机身设计和强大的运动控制功能,成为中小型自动化项目的首选控制器。这套系统最核心的组件是工艺对象&#xff08…

2026/7/5 2:26:36 阅读更多 →
[MAF预定义ChatClient中间件-05]动态修改ChatOptions和请求消息

[MAF预定义ChatClient中间件-05]动态修改ChatOptions和请求消息

1. 利用ConfigureOptionsChatClient交替使用不同的模型 如下的程序演示了如何利用ConfigureOptionsChatClient中间件来动态地配置ChatOptions的ModelId属性,从而实现交替使用不同的模型来生成响应的功能。如代码片段所示,我们根据OpenAIClient创建了一个…

2026/7/5 2:24:36 阅读更多 →
Linux syslog日志权限出错

Linux syslog日志权限出错

一、Linux syslog日志权限 Linux syslog日志权限出错通常是由于文件权限设置不当或用户权限不足导致的,可通过检查日志文件权限、所有者、用户权限,以及SELinux设置来定位并解决问题。 以下是具体分析和解决步骤: 检查日志文件权限 使用 ls -…

2026/7/5 2:24:36 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻