news 2026/5/29 2:17:49

【LeetCode刷题】翻转二叉树

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【LeetCode刷题】翻转二叉树

给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。

示例 1:

输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]

示例 2:

输入:root = [2,1,3]输出:[2,3,1]

示例 3:

输入:root = []输出:[]

提示:

  • 树中节点数目范围在[0, 100]
  • -100 <= Node.val <= 100

解题思路

翻转二叉树的本质是交换树中每个节点的左右子节点,采用递归策略实现:

  1. 边界处理:若当前节点为空(root is None),直接返回空(无需翻转);
  2. 交换子节点:对当前非空节点,交换其leftright子节点;
  3. 递归遍历:分别对交换后的左子节点、右子节点递归执行翻转操作;
  4. 返回节点:完成当前节点及子树的翻转后,返回当前节点。

示例验证(以示例 1 为例)

输入树结构:root = [4,2,7,1,3,6,9]

  1. 根节点4:交换左右子节点27,得到左子树7、右子树2
  2. 节点7:交换其左右子节点69
  3. 节点2:交换其左右子节点13;最终得到翻转后的树:[4,7,2,9,6,3,1],与示例输出一致。

算法特性

  • 时间复杂度:O(n)(需遍历树中所有n个节点,每个节点仅处理一次);
  • 空间复杂度:O(h)(h为树的高度,递归栈的深度由树高决定;最坏情况下树为链状,h=n)。

Python代码

from typing import Optional, List, Deque from collections import deque class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right class Solution: def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]: # 边界条件:空节点直接返回 if not root: return None # 交换当前节点的左右子节点 root.left, root.right = root.right, root.left # 递归翻转左子树和右子树 self.invertTree(root.left) self.invertTree(root.right) # 返回当前节点(已完成翻转) return root def build_tree(nums: List[Optional[int]]) -> Optional[TreeNode]: """层序遍历构建二叉树(适配LeetCode的数组表示法,None表示空节点)""" if not nums or nums[0] is None: return None root = TreeNode(nums[0]) q: Deque[TreeNode] = deque([root]) i = 1 while q and i < len(nums): cur_node = q.popleft() # 构建左子节点 if nums[i] is not None: cur_node.left = TreeNode(nums[i]) q.append(cur_node.left) i += 1 # 构建右子节点 if i < len(nums) and nums[i] is not None: cur_node.right = TreeNode(nums[i]) q.append(cur_node.right) i += 1 return root def print_tree(root: Optional[TreeNode]) -> List[Optional[int]]: """层序遍历打印二叉树(转回数组,方便查看翻转结果)""" if not root: return [] res = [] q: Deque[TreeNode] = deque([root]) while q: cur_node = q.popleft() if cur_node: res.append(cur_node.val) q.append(cur_node.left) q.append(cur_node.right) else: res.append(None) # 去除末尾的空节点,让结果更整洁 while res and res[-1] is None: res.pop() return res if __name__ == "__main__": nums = [4, 2, 7, 1, 3, 6, 9] # 原二叉树数组 root = build_tree(nums) print("翻转前的二叉树(层序):", print_tree(root)) # 输出 [4,2,7,1,3,6,9] # 执行翻转 sol = Solution() invert_root = sol.invertTree(root) print("翻转后的二叉树(层序):", print_tree(invert_root)) # 输出 [4,7,2,9,6,3,1]

LeetCode提交代码

# 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 invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]: # 边界条件:空节点直接返回 if not root: return None # 交换当前节点的左右子节点 root.left, root.right = root.right, root.left # 递归翻转左子树和右子树 self.invertTree(root.left) self.invertTree(root.right) # 返回当前节点(已完成翻转) return root

程序运行截图展示

总结

本文介绍如何翻转二叉树,即交换树中每个节点的左右子节点。采用递归策略:处理空节点直接返回;非空节点交换左右子节点后递归处理子树。示例验证显示输入[4,2,7,1,3,6,9]翻转后为[4,7,2,9,6,3,1]。算法时间复杂度O(n),空间复杂度O(h)。提供Python实现代码,包括树构建和打印方法,以及LeetCode提交格式。核心思想是通过递归交换左右子树实现整棵树的翻转。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 0:04:26

10333_基于SpringBoot的家电进存销系统

1、项目包含 项目源码、项目文档、数据库脚本、软件工具等资料&#xff1b; 带你从零开始部署运行本套系统。 2、技术说明 后端&#xff1a;SpringBoot 前端&#xff1a;JSP 数据库&#xff1a;MySql 开发工具&#xff1a;JDK1.8及以上 IDEA/Eclipse MySQL Maven 本…

作者头像 李华
网站建设 2026/5/23 11:19:12

thinkphp+vue网上书店系统图书销售商城的设计与实现

目录 摘要 项目开发技术介绍PHP核心代码部分展示系统结论源码获取/同行可拿货,招校园代理 摘要 该系统基于ThinkPHP框架和Vue.js前端技术&#xff0c;设计并实现了一个功能完善的网上书店销售平台。后端采用ThinkPHP提供RESTful API接口&#xff0c;实现用户管理、图书分类、订…

作者头像 李华
网站建设 2026/5/23 8:28:52

Mandelbrot集合的多线程并行计算加速

Mandelbrot集合的多线程并行计算加速 最近研究并行计算&#xff0c;找了CS149的网课看看&#xff0c;顺便做做作业QAQ 代码下载&#xff1a;Mandelbrot集合的多线程并行计算加速代码文件 目录 Mandelbrot集合的多线程并行计算加速1、Mandelbrot 集合介绍1.1 Mandelbrot 图像的…

作者头像 李华
网站建设 2026/5/23 20:35:56

基于Java的建立归档智慧管理系统的设计与实现全方位解析:附毕设论文+源代码

1. 为什么这个毕设项目值得你 pick ? 基于Java的建立归档智慧管理系统的设计与实现全,旨在介绍一个功能全面且易于实施的企业级管理信息系统。该系统不仅涵盖了传统选题如项目管理和合同管理&#xff0c;还增加了文件、物品、支出记录等多样化模块&#xff0c;并创新性地引入…

作者头像 李华
网站建设 2026/5/12 8:59:20

结构因果模型:医疗AI审计的测试工程师指南

在医疗AI飞速发展的今天&#xff0c;诊断决策的可靠性成为生死攸关的问题。结构因果模型&#xff08;SCM&#xff09;作为一种因果可解释性工具&#xff0c;通过图模型揭示变量间的因果关系&#xff08;如“吸烟→肺癌”&#xff09;&#xff0c;为AI决策链提供透明审计基础。对…

作者头像 李华
网站建设 2026/5/24 3:48:07

【系统分析师】6.6 电子政务

&#x1f3db;️ 一、概述&#xff1a;政府治理的“数字化重塑”电子政务是指政府机构运用现代信息和通信技术&#xff0c;将管理和服务通过网络技术进行集成&#xff0c;优化政府组织结构和工作流程&#xff0c;超越时间、空间及部门分隔的限制&#xff0c;向社会提供高效、优…

作者头像 李华