【LeetCode226】翻转二叉树

四参数与七参数坐标转换含义及区别 一.前言 不同坐标系,其椭球体的长半径,短半径和扁率是不同的。比如我们常用的四种坐标系北京54、西安80、WGS84、CGCS2000所对应的椭球体,它们的椭球体参数就各不相同。而不同空间直角坐标系之间的转换一般通过七参数或者四参数来实现坐标转换。 二.四参数转换 两个不同的二维平面直角坐标系之间转换通常使用四参数模型,四参数适合小范围测区的空间坐标转换,相对于七参数转换的优势在于只需要2个公共已知点就能进行转换,操作简单。 在该模型中有四个未知参数,即: (1)两个坐标平... 阅读详情

题目描述

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

思路与算法

这个问题自然是递归的,因为反转一棵树涉及到反转它的子树。
让 f(node) 是一个函数,用于反转以 node 为根的二叉树。如果 node 有左子树 L 和右子树 R,那么根据定义,反转以 node 为根的树是通过首先反转右子树 R 得到 f®,反转左子树 L 得到 f(L),然后交换这两个反转后的子树。用公式表示,我们可以写为:
f(node)=Node(node.val,left=f(node.right),right=f(node.left))

  • Base Case: 如果当前节点是 None ,那么没有什么可以反转的,因此我们返回 None
  • 递归步骤:对于每个节点
    • 递归地反转它的左子树
    • 递归地反转它的右子树
    • 交换这两个反转的子树

代码

# 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
        inverted_left = self.invertTree(root.right)
        inverted_right = self.invertTree(root.left)

        root.left = inverted_left
        root.right = inverted_right
        return root
        

总结

假设你有一个大盒子,里面装着一个小盒子,小盒子里又装着更小的盒子……一直到最小的盒子里什么都没有。每个盒子的结构都和大盒子一样,只不过尺寸变小了。解决问题的时候,你可以先解决最小盒子的问题,再一层一层往外解决,这就是递归的做法。
递归就是类似这种“在里面还藏着同样的东西”的思想。(同样的东西,或许是同样的函数映射)
简单来说,递归思想就是把一个大问题拆成和原问题很像但更小的问题,一直拆到最简单的时候再一步步合起来解决。这样的方法就叫做递归。

形成递归解决方案/形成递归结构的通用模式

  1. 确定base case(s):
    • 确定可以直接解决的最简单问题实例。
    • base case停止递归,防止无限循环
    • 在树问题中,base case通常是当前节点为 null(或当你到达叶子节点时)
  2. 拆解问题
    • 确保子问题在性质上与原始问题相似。
    • 在二叉树的翻转中,翻转整个树的问题简化为翻转左子树和右子树。
  3. 定义递归步骤
    • 清楚地表达问题的解决方案如何依赖于其子问题的解决方案
    • 形式举例:f(node)=Node(node.val,left=f(node.right),right=f(node.left)),这个方程清楚地表达了整个树的解(即 f(node))是如何依赖于其子问题的解(即 f(node.left) 和 f(node.right))。
  4. 组合子问题的解决方案
    • 例如:在反转子树后,交换它们以形成反转树。
  5. 注意
    • 不正确或缺失的基例可能导致无限递归或错误的结果
    • 确保每个递归调用都是在一个严格更小或更简单的问题实例上
华为OD机试 - 幸运数字(Java 2024 E卷 100分) 华为OD机试 2024E卷题库疯狂收录中,刷题。 阅读详情

相关推荐

【AI学习笔记】Coze平台实现将Excel文档批量导入数据库全过程

通过Coze平台实现将Excel文档批量导入数据库的全流程,包括B站现有参考教程全方位解读、自己实操的一些BUG解决过程,以及一些疑难问题的探索。

bailichen800的博客 8825

翻转二叉树 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 = [] 输出:[] /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;

轩玉的博客 733

Plant Simulation新手入门:5步搞定生产线物流仿真(附模型库使用技巧)

本文为Plant Simulation新手提供了从零开始构建生产线物流仿真的五步入门指南。通过理念重塑、流程规划、对象连接、参数设置到数据分析的完整流程,帮助用户快速掌握这一强大仿真工具的核心逻辑。文章特别强调了模型库的高效使用技巧,助力工程师在虚拟环境中精准模拟和优化生产系统,提升规划效率。

efc123456的博客 333

力扣leetcode226. 翻转二叉树

力扣leetcode226. 翻转二叉树 题目链接 226. 翻转二叉树 思路 观察可得我们只需要逐个翻转二叉树结点,最终就可以得到一个翻转二叉树 step1 确定终止条件 如果当前节点为空时,就返回 if(!root) return nullptr; step2 实现单趟递归 我们采用前序遍历的方式,先翻转当前节点左右孩子,在翻转左右子树 swap(root->left, root->right); invertTree(root->left); invertTree(root

qq_36711295的博客 288

自动驾驶仿真(二)—— 基于PreScan与Simulink的联合仿真

自动驾驶仿真软件介绍二—— PreScan与Simulink联合仿真1. Prescan仿真软件2. Prescan与Simulink联合仿真2. 1 Prescan和matlab软件安装2. 2 联合仿真配置3. 联合仿真实例3.1 一辆不按法规行驶的小车3.2 另一辆的正常行驶的小车3.3 视觉辅助摄像机3.4 传感器检测4. 系列学习视频教程5. 参考学习的书目教材 上一篇博文简单介绍了Carsim与Simulink联合仿真,接着这篇就再继续简单介绍另一款自动驾驶仿真软件Prescan,并且简单做个P

zhudj08的博客 1万+

最新Python爬虫实战(入门爬虫篇)——案例13:某乎热榜数据采集(详细爬虫思路截图+抓包动图演示+完整爬虫代码+详细注释)

本次案例通过Python爬虫技术,成功实现了基于Cookies认证的某乎热榜数据爬取与Excel保存。代码采用模块化设计,包含Cookies解析、HTML请求、结构化解析、Excel持久化等完整流程;通过配置浏览器请求头+Cookies认证,有效突破某乎基础反爬策略,保证请求稳定性。整个爬虫逻辑遵循“Cookies认证 → 页面请求 → HTML解析 → 数据清洗 → 保存到Excel”的标准流程,与需要会话验证的网站爬取范式高度一致。Cookies解析与认证。

努力让自己发光,对的人才能迎着光而来 33万+

226. 翻转二叉树【 力扣(LeetCode) 】

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

yyh520025的博客 718

使用字体解密技术爬取懂车帝二手车数据

本文介绍了一种针对懂车帝二手车平台的字体加密数据采集方案。通过抓包分析,识别出关键API接口并解析了字体加密机制,成功实现了价格等敏感数据的解密。方案采用requests库发送POST请求获取JSON数据,利用fontTools解析字体映射关系,建立加密字符到真实数字的转换算法。程序支持多页采集,提取车辆名称、价格、年份等12个维度的信息,并自动保存为Excel格式。技术亮点包括动态字体解析、健壮的数据处理和分页优化,为二手车市场分析提供了可靠的数据支持。文中特别强调数据采集的合法合规性,建议仅用于学术研究

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1310

《LeetCode力扣练习》第226题 翻转二叉树 Java

《LeetCode力扣练习》第226题 翻转二叉树 Java 一、资源 题目: 给你一棵二叉树的根节点 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 来源:力扣(Le

XRT_knives的博客 1617

人形机器人电源系统硬件开发:从原理图设计到PCB布局的完整流程

人形机器人是“移动的智能终端”,其电源系统如同“心脏+血管”:既要为大脑(主控)、肌肉(电机)、感官(传感器)提供稳定能量,又要在有限体积内应对高动态负载(如跳跃时电机瞬间大电流)。本文聚焦“硬件开发”维度,覆盖从需求分析到PCB制板的完整流程,适合硬件工程师、机器人爱好者快速掌握工程实战方法。

AI天才研究院 2174

ADRC自抗扰PD+ESO控制(博途SCL源代码)

文章浏览阅读119次。线性自抗扰控制(LADRC)系统算法框图-优快云博客文章浏览阅读335次。NLADRC自抗扰控制从Simulink仿真到PLC控制实现_自抗扰控制器 simulink仿真-优快云博客本文介绍了如何将ADRC自抗扰控制算法从Simulink仿真应用到PLC控制中,包括Simulink框图、TD微分器模型、MATLAB函数的使用、SCL控制代码,以及非线性状态误差反馈控制率的实现。ADRC自抗扰PD+ESO控制(CODESYS测试+完整ST代码)-优快云博客。

RXXW_Dor的博客 1315

226.力扣LeetCode_翻转二叉树

摘要:先序和后序遍历能实现二叉树翻转,而标准中序遍历不能。原因在于遍历顺序与交换操作的匹配度:先序遍历先交换再处理子树,后序遍历先处理子树再交换,两者逻辑自洽。而中序遍历在交换后会导致子树处理错位,造成原右子树漏处理、原左子树重复处理的问题,无法正确翻转整棵树。

2401_82472941的博客 1158

【数据集】全球大气空气柱平均甲烷(XCH₄)和一氧化碳(XCO)浓度数据集 TROPOMI/WFMD

全球大气空气柱平均甲烷(XCH₄)和一氧化碳(XCO)浓度数据集 TROPOMI/WFMD

WW、forever的博客 387

LeetCode 226 翻转二叉树

LeetCode 226 翻转二叉树 题目链接 翻转一棵二叉树。 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 简单 BFS,从根结点往下,依次交换左右儿子即可,AC代码如下: class Solution { public: TreeNode* invertTree(TreeNode* root) { queue

旺崽的博客 2656

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Leetcode 226. 翻转二叉树

Leetcode 226. 翻转二叉树1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/invert-binary-tree/   本质上就是一个二叉树的遍历问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。 2、问题解决   笔者以C++方式解决。 #include "iostream" using namespace std; #include "a

珍惜 9064

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【简单】力扣算法题解析LeetCode226:翻转二叉树

题目要求翻转二叉树,即交换每个节点的左右子树。核心思路是递归或迭代遍历树节点并交换左右子树。递归法简洁高效,时间复杂度O(n),空间复杂度O(h);迭代法使用队列层序遍历,空间复杂度O(w)。本文选用递归法,Java实现通过交换子树并递归处理左右节点完成翻转。

ylumwd的博客 648

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

力扣226 翻转二叉树

即左右进行交换再递归 /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ struct TreeNode* invertTree(struct Tre...

qq_40519283的博客 357

力扣(LeetCode)226. 翻转二叉树(C语言)

【墨染】递归。

墨染 549

LeetCode 226. 翻转二叉树

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 226. 翻转二叉树,做好准备了么,那么开始吧。 🌲🌲🐴🐴

weixin_62275996的博客 167

Leetcode226. 翻转二叉树

Leetcode226. 翻转二叉树 题目; 翻转一棵二叉树。 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 题解: 迭代、递归 scala代码如下: /** * 迭代 * * @param roo...

会流泪de鱼的博客 228

Leetcode力扣226 翻转二叉树

【代码】Leetcode力扣226 翻转二叉树。

weixin_53415999的博客 137

LeetCode 226翻转二叉树

LeetCode 226翻转二叉树 题目简述:翻转一棵二叉树。 输入:[4, 2, 7, 1, 3, 6, 9] 输出:[4, 7, 2, 9, 6, 3, 1] 思路:递归遍历整棵二叉树,遍历到每个节点时交换左右儿子。时间复杂度O(n) class Solution { public: TreeNode* invertTree(TreeNode* root) { if(!root) return 0; swap(root->left, root-&

XBlog 172

力扣第226题“翻转二叉树”

本文详细解读了力扣第226题“翻转二叉树”,通过使用递归和迭代的方法高效地解决了这一问题,并提供了详细的解释和模拟面试问答。希望读者通过本文的学习,能够在力扣刷题的过程中更加得心应手。

10年数据\经营分析经验,现任大厂数据分析负责人 1012

二叉树OJ题:LeetCode--226.翻转二叉树

LeetCode--226.翻转二叉树:使用C语言递归实现的详细解题思路,你也快来试试吧!

Yikefore的博客 772

力扣226. 翻转二叉树(递归)

力扣226. 翻转二叉树(递归) 翻转一棵二叉树。 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 递归 「1. 定义函数功能」 函数功能(即这个递归原问题是),给出一颗树,然后翻转它,所以,函数可以定义为: ListNode* reverseList(ListNode* head) 「2.寻找递归终止条件」 ...

小麦China的博客 513

leetcode 226. 翻转二叉树

leetcode 226. 翻转二叉树 题目详情 题目链接 翻转一棵二叉树。 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 备注: 这个问题是受到 Max Howell 的 原问题 启发的 : 谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。 我的代码 /** * Definition for

qq_33789406的博客 106
上一篇: 【LeetCode347】前k个高频元素
下一篇: 【LeetCode101】对称二叉树
Pyroyster
博客等级 码龄7年 206粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值