leetcode226反转二叉树

 本文主要讲解反转二叉树的要点与细节,按照步骤思考更方便理解 

c++和java代码如下,末尾

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

 具体要点:

1. 首先我们要理解题意, 反转二叉树具体来说,就是针对每个节点交换他们左右子节点的指针(而不是交换数值)


2. 既然是涉及到交换,那么就是需要swap函数,或者是temp临时变量,如下

swap(root->left, root->right);    //交换左右子树的指针


3.  其次,涉及到二叉树,我们第一时间就要想到二叉树的遍历顺序,以及递归或是遍历操作。文章末尾会具体分析什么时候用哪种方式。

        本题我们优先使用前序遍历+递归操作,不了解二叉树遍历顺序的,可以参考这个文章

        前序 左 右

        递归:递归参数与返回值 + 终止条件 + 单层递归逻辑


4. 接下来,我们具体考虑递归应该怎么写

        首先,递归参数与返回值

递归传入的参数是我们每次的节点,返回的也是我们传入的节点

TreeNode* invertTree(TreeNode* root) 

        其次,确定终止条件:

对于二叉树来说,终止条件一般是遇到节点是null,就终止,并返回 

if (root == nullptr)return root;

        最后,确定单层递归逻辑:

 在2中我们已经分析了,要交换左右子树的指针,接下来,我们就要继续递归左右子树

 //递归操作,交换左右子树
swap(root->left, root->right);
//左子树
invertTree(root->left);
//右子树
invertTree(root->right);

 5. 最后总结:

在二叉树的遍历中,我们通常使用不同的数据结构来模拟递归过程或实现特定的遍历顺序(层序遍历)。

通常来说,前中后序遍历——递归,层序遍历——队列模拟(广度优先遍历)

但是前中后序遍历,也可以用迭代法实现——栈模拟(深度优先遍历)


 c++代码如下:

class Solution {
public:TreeNode* invertTree(TreeNode* root) {//递归,前序遍历(中左右)//递归终止条件if (root == nullptr)return root;//递归操作,交换左右子树swap(root->left, root->right);//左子树invertTree(root->left);//右子树invertTree(root->right);return root;}
};

java代码如下:

class Solution {public TreeNode invertTree(TreeNode root) {if(root == null) return null;TreeNode temp=root.left;root.left=root.right;root.right=temp;invertTree(root.left);invertTree(root.right);return root;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/862950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis-Plus:快速入门

1. 概念 MyBatis-Plus(简称 MP)是一个MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。其突出的特性如下: * **无侵入**:只做增强不做改变,引入它不会对现有…

昇思25天学习打卡营第11天|基于MindSpore通过GPT实现情感分类

学AI还能赢奖品?每天30分钟,25天打通AI任督二脉 (qq.com) 基于MindSpore通过GPT实现情感分类 %%capture captured_output # 实验环境已经预装了mindspore2.2.14,如需更换mindspore版本,可更改下面mindspore的版本号 !pip uninsta…

Kubernetes面试整理-RBAC(基于角色的访问控制) 的理解和配置方法

在 Kubernetes 中,RBAC(基于角色的访问控制,Role-Based Access Control)是一种控制访问权限的机制,用于管理用户和服务账户对集群资源的访问。RBAC 通过定义角色和角色绑定来控制谁可以对哪些资源执行哪些操作。 核心概念 1. Role 和 ClusterRole: ● Role:定义在特定命…

java基于微信小程序+mysql+RocketMQ开发的医院智能问诊系统源码 智能导诊系统 智能导诊小程序源码

java基于微信小程序mysqlRocketMQ开发的医院智能问诊系统源码 智能导诊系统 智能导诊小程序源码 医院导诊系统是一种基于互联网和定位技术的智能化服务系统,旨在为患者提供精准、便捷的医院内部导航和医疗就诊咨询服务。该系统整合了医院的各种医疗服务资源&#x…

【软件实施】软件实施概论

目录 软件实施概述定义主要工作软件项目的实施工作区别于一般的项目(如:房地产工程项目)软件实施的重要性挑战与对策软件项目实施的流程软件项目实施的周期 软件企业软件企业分类产品型软件企业业务特点产品型软件企业的分类产品型软件企业的…

PortSip测试

安装PBX 下载 免费下载 PortSIP PBX 安装PBX,安装后,运行 ,默认用户是admin 密码是admin,然后配置IP 为192.168.0.189 设置域名为192.168.0.189 配置分机 添加分机,添加了10001、10002、9999 三个分机&#xff0c…

Android Studio中使用命令行gradle查看签名信息

Android Studio中使用命令行gradle查看签名信息: 使用 Gradle 插件生成签名报告 打开 Android Studio 的 Terminal。 运行以下命令:./gradlew signingReport 将生成一个签名报告,其中包含 MD5、SHA1 和 SHA-256 的信息。 如果失败&#xf…

10分钟完成微信JSAPI支付对接过程-JAVA后端接口

引入架包 <dependency><groupId>com.github.javen205</groupId><artifactId>IJPay-WxPay</artifactId><version>${ijapy.version}</version></dependency>配置类 package com.joolun.web.config;import org.springframework.b…

【递归、搜索与回溯】记忆化搜索

记忆化搜索 1.记忆化搜索2.不同路径3.最长递增子序列4. 猜数字大小 II5.矩阵中的最长递增路径 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603;…

5000字深入讲解:企业数字化转型优先从哪个板块开始?

很多企业都知道数字化转型重要&#xff0c;但不知道应该怎样入手&#xff0c;分哪些阶段。以下引用国内领先数字化服务商 织信Informat 的数字化转型方法论材料&#xff0c;且看看他们是如何看待数字化转型的&#xff1f;数字化转型应该从哪先开始&#xff1f;如何做&#xff1…

Java中的类与接口:抽象与实现的艺术

Java中的类与接口&#xff1a;抽象与实现的艺术 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Java中类与接口的设计原则&#xff0c;以及如…

P1107 [BJWC2008] 雷涛的小猫

[BJWC2008] 雷涛的小猫 题目背景 原最大整数参见 P1012 题目描述 雷涛同学非常的有爱心&#xff0c;在他的宿舍里&#xff0c;养着一只因为受伤被救助的小猫&#xff08;当然&#xff0c;这样的行为是违反学生宿舍管理条例的&#xff09;。在他的照顾下&#xff0c;小猫很快…

阿里云服务器数据库迁云: 数据从传统到云端的安全之旅(WordPress个人博客实战教学)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 一、 开始实战1.2创建实验资源1.3重置云服务器ECS的登录密码&#xff08;请记住密码&#xff09;1.4 设置安全组端口1…

C++ STL: std::vector与std::array的深入对比

什么是 std::vector 和 std::array 首先&#xff0c;让我们简要介绍一下这两种容器&#xff1a; • std::vector&#xff1a;一个动态数组&#xff0c;可以根据需要动态调整其大小。 • std::array&#xff1a;一个固定大小的数组&#xff0c;其大小在编译时确定。 虽然…

Adobe Acrobat Pro或者Adobe Acrobat Reader取消多标签页显示,设置打开一个pdf文件对应一个窗口。

Windows系统&#xff1a;Adobe Acrobat Pro或者Adobe Acrobat Reader首选项-一般-取消在同一窗口的新标签中打开文档&#xff08;需要重启&#xff09;的对勾&#xff0c;点击确定&#xff0c;彻底关闭后重启&#xff0c;这样打开的每一个PDF文件对应的是一个窗口&#xff0c;并…

力扣第214题“最短回文串”

在本篇文章中&#xff0c;我们将详细解读力扣第214题“最短回文串”。通过学习本篇文章&#xff0c;读者将掌握如何使用 KMP 算法来解决这一问题&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释&#xff0c;以便于理解。 问题描述 力扣第214题…

拓展方法知识点

拓展方法的基本概念 概念 为现有非静态变量类型添加新方法。 作用 1.提升程序拓展性。 2.不需要再对象中重新写方法。 3.不需要继承来添加方法。 4.为别人封装的类型写额外的方法。 特点 1.一定是写在静态类中。 2.一定是个静态函数。 3.第一个参数为拓展目标。 4…

Bridging nonnull in Objective-C to Swift: Is It Safe?

Bridging nonnull in Objective-C to Swift: Is It Safe? In the world of iOS development, bridging between Objective-C and Swift is a common practice, especially for legacy codebases (遗留代码库) or when integrating (集成) third-party libraries. One importa…

重磅更新-UniApp自定义字体可视化设计

重磅更新-UniApp自定义字体可视化设计。 DIY可视化为了适配不同APP需要&#xff0c;支持用户自定义字体&#xff0c;自定义字体后&#xff0c;设计出来的界面更多样化&#xff0c;不再是单一字体效果。用户可以使用第三方字体加入设计&#xff0c;在设计的时候选择上自己的字体…

简过网:三支一扶有编制吗?考上三支一扶就是入编了吗?

小编看到很多朋友在咨询三支一扶的相关问题&#xff0c;比如三支一扶有没有编制&#xff1f;今天&#xff0c;针对这个问题咱们一块来了解一下吧。 三支一扶是没有编制的&#xff0c;既没有事业编制&#xff0c;也不是公务员编制 什么是三支一扶&#xff1f; 三支一扶是指大…