leetCode 226.翻转二叉树 递归 + 非递归 + 前中后序 + 层序遍历 【深度和广度优先遍历】

我的往期文章:

leetCode 226.翻转二叉树-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_41987016/article/details/134613347?spm=1001.2014.3001.5501


(一)递归做法(深度)

  • C++代码:前序遍历
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root==nullptr) return nullptr;swap(root->left,root->right); // 中TreeNode* left = invertTree(root->left);   // 左TreeNode* right = invertTree(root->right); // 右return root;}
};
  • C++代码:后序遍历
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root==nullptr) return nullptr;TreeNode* left = invertTree(root->left);   // 左TreeNode* right = invertTree(root->right); // 右swap(root->left,root->right); // 中return root;}
};
  • C++代码:中序遍历
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root==nullptr) return nullptr;TreeNode* right = invertTree(root->left); // 左swap(root->left,root->right); // 中TreeNode* left = invertTree(root->left);   // 左return root;}
};

(二)非递归做法

  • C++代码:前序遍历
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root == NULL) return root;stack<TreeNode*> st;st.push(root);while(!st.empty()) {TreeNode* node = st.top();st.pop();swap(node->left,node->right);if(node->right) st.push(node->right); // 右if(node->left) st.push(node->left); // 左 }return root;}
};
  • C++代码:后序遍历
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root == NULL) return root;stack<TreeNode*> st;st.push(root);while(!st.empty()) {TreeNode* node = st.top();st.pop();if(node->right) st.push(node->right); // 右if(node->left) st.push(node->left); // 左 swap(node->left,node->right);}return root;}
};
  • C++代码:中序遍历
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root == NULL) return root;stack<TreeNode*> st;st.push(root);while(!st.empty()) {TreeNode* node = st.top();st.pop();if(node->left) st.push(node->left); // 左swap(node->left,node->right);if(node->left) st.push(node->left); // 左 }return root;}
};

(三)层序遍历(广度优先遍历)

// 广度优先遍历
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root == NULL) return root;queue<TreeNode*> Q;Q.push(root);while(!Q.empty()) {TreeNode* node = Q.front();Q.pop();swap(node->left,node->right); // 节点处理if(node->left) Q.push(node->left); // 左if(node->right) Q.push(node->right); // 右}return root;}
};

参考和推荐文章:

226. 翻转二叉树 - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/invert-binary-tree/solutions/415494/226-fan-zhuan-er-cha-shu-di-gui-fa-die-dai-fa-xian/

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

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

相关文章

android 调用 c++builder

CBuilder使用FireMonkey来开发Android应用程序&#xff0c;并且将应用程序编译为.so文件&#xff0c;以下是一个简单的示例代码&#xff0c;可以调用该文件来显示一个简单的窗口&#xff1a; c #include <FMX.Forms.hpp> #include <FMX.Controls.hpp> class TForm…

java spring-boot 修改打包的jar包名称

修改pom文件 <finalName>lzwd</finalName><build><finalName>lzwd</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plu…

【模型融合】集成学习(boosting, bagging, stacking)原理介绍、python代码实现(sklearn)、分类回归任务实战

文章目录 概览boostingbaggingStacking投票平均Stack 代码实现1. 分类1.0 数据集介绍1.1 boosting1.2 bagging1.3 stacking 2. 回归2.0 数据集介绍stacking 概览 简单来说&#xff0c;集成学习是一种分类器结合的方法&#xff08;不是一种分类器&#xff09;。 宏观上讲集成学…

如何搭建zerotier服务器组网实现内网穿透

小白花了四天的下班时间终于把zerotier网络调通&#xff0c;此刻坐在桌前舒畅地喝口茶&#xff5e;&#xff5e; 下面来详细记录下这几天踩的坑&#xff1a; 起因就在于一直在iPad上用向日葵连接公司电脑的我觉得向日葵的界面用的实在难受&#xff0c;vs code操作十分不灵光&…

LemMinX-Maven:帮助在eclipse中更方便地编辑maven的pom文件

LemMinX-Maven&#xff1a;https://github.com/eclipse/lemminx-maven LemMinX-Maven可以帮助我们在eclipse中更方便地编辑maven工程的pom.xml文件&#xff0c;例如补全、提示等。不用单独安装&#xff0c;因为在安装maven eclipse插件的时候已经自动安装了&#xff1a; 例…

中国茂金属聚丙烯(mPP)行业调研与投资评估报告(2023版)

内容简介&#xff1a; mPP透明性和表面光泽度可与其他一些透明树脂&#xff08;聚碳酸酯PC、聚苯乙烯 PS等&#xff09;相媲美&#xff0c;性能价格比也优于PC、PS、PET 等&#xff0c;因此被广泛应用于透明包装、医疗器械、家庭用品、一般工业等领域&#xff0c;其中医疗卫生…

记一次简单的PHP反序列化字符串溢出

今天朋友给的一道题&#xff0c;让我看看&#xff0c;来源不知&#xff0c;随手记一下 <?php // where is flag error_reporting(0); class NFCTF{ public $ming,$id,$payload,$nothing;function __construct($iii){$this->ming$ii…

es6中的import导入模块 和 export导出模块

es6中的import导入模块 和 export导出模块 一、定义二、使用1.默认导出导入2..命名导出导入3.命名导出&#xff08;Named Export&#xff09;与默认导出&#xff08;Default Export&#xff09;结合使用 三、总结 一、定义 功能&#xff1a;用于导入和导出模块的内容。 静态加载…

QT已有项目导入工程时注意事项

文章目录 从qt其他版本上开发的工程导入另一qt版本时 从qt其他版本上开发的工程导入另一qt版本时 这里以之前在qt5.12.2上开发的项目为例&#xff0c;现在到在qt6.5.3上运行。 不能直接导入IDE上&#xff0c;否则会报各种莫名奇妙的错误。 首先要把扩展名位.pro.user文件 删掉…

【Python 训练营】N_4 三个整数大小比较

题目 输入三个整数x,y,z&#xff0c;请把这三个数由小到大输出。 分析 我们想办法把最小的数放到x上&#xff0c;先将x与y进行比较&#xff0c;如果x>y则将x与y的值进行交换&#xff0c;然后再用x与z进行比较&#xff0c;如果x>z则将x与z的值进行交换&#xff0c;这样…

一个没正常处理tcp对端关闭的bug

最近使用自研的http client时发现一个问题&#xff0c;对端在发送响应数据之后立即调用close关闭了连接&#xff0c;我这没有调用到响应的回调&#xff0c;而是调用到了连接关闭的回调。对端延迟一会再关闭连接就没问题&#xff0c;用curl去访问也是正常的。经过排查是没有正确…

Apache換行解析漏洞(CVE-2017-15715)

漏洞简介 Apache換行解析漏洞(CVE-2017-15715)是一种解析漏洞,可以影响httpd 2.4.0至2.4.29版本中的PHP解析。攻击者可以通过在上传的文件名中添加特定的换行符,绕过服务器的安全策略,使其被解析成PHP文件而不是普通文件。此漏洞会影响具有以下条件的服务器: 未正确配置…

AIGC: 关于ChatGPT抽象Prompt提问模板的设计

为什么需要Prompt模板 基于前文我们具备了Prompt构建的基础能力&#xff0c;但是我们在实际编写Prompt的过程当中&#xff0c;可能还会存在一些的问题 比如对于背景和细节的描述还是不够或者为了描述的清楚堆砌了大量的文字, 导致整个Prompt的结构化和可读性呢是比较差的从而G…

linux开启apache服务

vim /etc/apache2/ports.conf 键盘输入i 进入插入编辑模式&#xff0c;修改apache2默认监听端口号为8080 &#xff0c;编辑好后&#xff0c;按Esc键“&#xff1a;wq!” 保存退出。&#xff08;注&#xff1a;端口也可以不修改&#xff09; 在终端输入“/etc/init.d/apache2 …

Python基础入门例程62-NP62 运动会双人项目(元组)

最近的博文: Python基础入门例程61-NP61 牛牛的矩阵相加(循环语句)-CSDN博客 Python基础入门例程60-NP60 跳过列表的某个元素(循环语句)-CSDN博客 Python基础入门例程59-NP59 提前结束的循环(循环语句)-CSDN博客 目录 最近的博文: 描述</

【HarmonyOS】ArkTS开发@Styles装饰器和@Extend装饰器详解

文章目录 HarmonyOS详解ArkTS详解ArkTS装饰器深度解析:@Styles、@Extend、和stateStyles@Styles装饰器:优雅的组件样式定义与重用@Extend装饰器:扩展原生组件样式的利器stateStyles:多态样式的应用示例场景:装饰器的联合使用进阶应用:动态样式与交互最佳实践:样式的组织…

[JVM] 垃圾回收算法

1. 标记—清除算法 标记—清除算法是最基础的垃圾回收算法&#xff0c;后续的垃圾收集算法都是基于标记—清除算法进行改进而得到的。标记—清除算法分为“标记”和“清除”两个阶段&#xff0c;首先标记出所有需要回收的对象&#xff0c;在标记完成后统一回收所有被标记的对象…

01_MySQL介绍及安装

#任务背景 一、真实案例 某公司现在有几套不同版本的MySQL数据库&#xff0c;现在大部分的生产和测试环境都已经切换到5.7版本&#xff0c;由于历史原因&#xff0c;有一套测试环境版本为MySQL-5.5。现为了将测试环境版本统一&#xff0c;需要将原来测试环境数据库MySQL-5.5版…

[JVM] 常用调优参数

随着Java应用程序的不断发展和优化&#xff0c;JVM调优已经变得越来越重要。在这篇文章中&#xff0c;我们将探讨一些常用的JVM调优参数&#xff0c;了解如何更好地优化Java应用程序的性能。 文章目录 1. -Xmx2. -Xms3. -XX:PermSize和-XX:MaxPermSize4. -XX:NewRatio5. -XX:Ma…

B/S前后端分离的Java医院云HIS信息管理系统源码(LIS源码+电子病历源码)

HIS系统采用主流成熟技术开发&#xff0c;软件结构简洁、代码规范易阅读&#xff0c;SaaS应用&#xff0c;全浏览器访问前后端分离&#xff0c;多服务协同&#xff0c;服务可拆分&#xff0c;功能易扩展。多医院、多集团统一登录患者主索引建立、主数据管理&#xff0c;统一对外…