力扣第226翻转二叉数 c++三种方法 +注释

news2024/10/6 18:27:11

题目

226. 翻转二叉树

简单

给你一棵二叉树的根节点 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

c++ 代码一 (递归法)

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if (root == NULL) return root;  // 如果根节点为空,直接返回该节点,不进行翻转操作
        
        swap(root->left, root->right);  // 交换当前节点的左右子树,实现翻转操作
        
        invertTree(root->left);         // 递归地对当前节点的左子树进行翻转
        
        invertTree(root->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();
            
            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) {
        queue<TreeNode*> que;  // 创建一个队列,用于存储待翻转的节点
        if (root != NULL) que.push(root);  // 如果根节点不为空,则将根节点入队列
        
        while (!que.empty()) {  // 当队列不为空时循环执行操作
            int size = que.size();  // 获取当前队列的大小,即当前层的节点数
            for (int i = 0; i < size; i++) {  // 遍历当前层的节点
                TreeNode* node = que.front();  // 取出队首节点作为当前节点
                que.pop();  // 出队列
                
                swap(node->left, node->right);  // 交换当前节点的左右子树,实现翻转操作
                
                if (node->left) que.push(node->left);  // 如果当前节点的左子树不为空,则将左子树节点入队列,准备进行翻转操作
                if (node->right) que.push(node->right);  // 如果当前节点的右子树不为空,则将右子树节点入队列,准备进行翻转操作
            }
        }
        
        return root;  // 返回翻转后的根节点
    }
};

以上是代码中的注释,解释了每一行代码的作用。

  • 创建一个队列,用于存储待翻转的节点。
  • 如果根节点不为空,则将根节点入队列。
  • 使用迭代法进行翻转操作:
    • 获取当前队列的大小,即当前层的节点数。
    • 遍历当前层的节点:
      • 取出队首节点作为当前节点。
      • 交换当前节点的左右子树,实现翻转操作。
      • 如果当前节点的左子树不为空,则将左子树节点入队列,准备进行翻转操作。
      • 如果当前节点的右子树不为空,则将右子树节点入队列,准备进行翻转操作。
  • 返回翻转后的根节点。

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

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

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

相关文章

阿里云服务器镜像系统Anolis OS龙蜥详细介绍

阿里云服务器Anolis OS镜像系统由龙蜥OpenAnolis社区推出&#xff0c;Anolis OS是CentOS 8 100%兼容替代版本&#xff0c;Anolis OS是完全开源、中立、开放的Linux发行版&#xff0c;具备企业级的稳定性、高性能、安全性和可靠性。目前阿里云服务器ECS可选的Anolis OS镜像系统版…

Linux shell编程学习笔记8:使用字符串

一、前言 字符串是大多数编程语言中最常用最有用的数据类型&#xff0c;这在Linux shell编程中也不例外。 本文讨论了Linux Shell编程中的字符串的三种定义方式的差别&#xff0c;以及字符串拼接、取字符串长度、提取字符串、查找子字符串等常用字符串操作,&#xff0c;以及反…

Nacos 使用

大家好我是苏麟今天带来Nacos注册中心 . Nacos注册中心 国内公司一般都推崇阿里巴巴的技术&#xff0c;比如注册中心&#xff0c;SpringCloudAlibaba也推出了一个名为Nacos的 注册中心。 认识Nacos Nacos是阿里巴巴的产品&#xff0c;现在是SpringCloud中的一个组件。相比E…

【Spring笔记04】Spring中Bean的生命周期及Bean的后置处理器

这篇文章主要介绍的是Spring框架中Bean的生命周期&#xff0c;Bean的后置处理器、以及多个后置处理器的先后执行顺序。 目录 一、生命周期介绍 1.1、什么是Bean的生命周期 1.2、Bean生命周期的过程 &#xff08;1&#xff09;实例化阶段 &#xff08;2&#xff09;依赖注入…

PostgreSQL ash —— pgsentinel插件

一、 插件作用 众所周知&#xff0c;pg是没有像oracle那样的ash视图的&#xff0c;因此要回溯历史问题不太方便。pgsentinel插件会将pg_stat_activity与pg_stat_statements视图内容定期快照&#xff0c;并存入pg_active_session_history和pg_stat_statements_history视图中。 1…

【实操记录】Oracle数据整库同步至Apache Doris

本文是Oracle数据整库同步至Apache Doris实操记录&#xff0c;仅供参考 参考&#xff1a;https://cn.selectdb.com/blog/104 1、Oracle 配置 [rootnode1 oracle]# pwd /u01/app/oracle [rootnode1 oracle]# mkdir recovery_area [rootnode1 oracle]# chown -R oracle:dba re…

WPF中, 如何将控件的触发事件绑定到ViewModel

在DataGrid 等控件中, 有很多这种带闪电符号的触发事件. 如果用传统的事件驱动, 则直接在后台中建立 一个private PropertyChanged(Sender s, EventAgars Args) 即可. 但是如果需要绑定到ViewModel的话? 应该怎么做? 带闪电符号的触发事件 实现viewModel绑定前端触发事件的…

【C++设计模式之原型模式:创建型】分析及示例

简介 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许通过复制已有对象来生成新的对象&#xff0c;而无需再次使用构造函数。 描述 原型模式通过复制现有对象来创建新的对象&#xff0c;而无需显式地调用构造函数或暴露对象的创建…

JAVA编程题-求矩阵螺旋值

螺旋类 package entity; /*** 打印数组螺旋值类*/ public class Spiral { // 数组行private int row; // 数组列private int col; // 行列数private int size; // 当前行索引private int rowIndex; // 当前列索引private int colIndex; // 行开始索引private int rowStart; //…

大模型部署手记(5)ChatGLM2+Jetson AGX Orin

1.简介&#xff1a; 组织机构&#xff1a;智谱/清华 代码仓&#xff1a;https://github.com/THUDM/ChatGLM2-6B 模型&#xff1a;THUDM/chatglm2-6b 下载&#xff1a;https://huggingface.co/THUDM/chatglm2-6b 镜像下载&#xff1a;https://aliendao.cn/models/THUDM/chat…

Java日期的学习篇

关于日期的学习 目录 关于日期的学习JDK8以前的APIDate Date常用APIDate的API应用 SimpleDateFormatSimpleDateFormat常用API测试 反向格式化(逆操作)测试 训练案例需求(秒杀活动)实现 Calendar需求痛点常见API应用测试 JDK8及以后的API(修改与新增)为啥学习(推荐使用)新增的AP…

ArcGIS Engine:鹰眼图的拓展功能-点击和矩形+坐标状态栏

目录 01 前言 02 鹰眼图的控制功能 03 显示当前鼠标的地理坐标 01 前言 说是拓展&#xff0c;不过是忘记了实验还有附加实验.这里补上. 前文不再赘述,上一节查看&#xff1a;ArcGIS Engine&#xff1a;视图菜单的创建和鹰眼图的实现_炒茄子的博客-CSDN博客 这里加上三个功能…

unity脚本_Vector3 c#

接下来学习 相对世界坐标 首先我们给场景物体一个空物体 修改新建空物体名字为GameObjectFather 修改GameObjectFather坐标 修改GameObject2坐标 然后将GameObjectFahter设置成GameObject2的父物体 我们观察到子物体的坐标改变了但是 运行显示的相对世界坐标this.transform.po…

R语言教程课后习题答案(持续更新中~~)

R语言教程网址如下 https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/index.html 目录 source()函数可以运行保存在一个文本文件中的源程序 R向量下标和子集 数值型向量及其运算 日期功能 R因子类型 source()函数可以运行保存在一个文本文件中的源程序…

学信息系统项目管理师第4版系列18_采购管理

1. 协议 1.1. 合同 1.1.1. 国际合作的项目经理应牢记&#xff0c;无论合同规定如何详尽&#xff0c;文化和当地法律对合同及其可执行性均有影响 1.2. 服务水平协议&#xff08;SLA&#xff09; 1.3. 谅解备忘录 1.4. 协议备忘录&#xff08;MOA&#xff09; 1.5. 订购单 …

十天学完基础数据结构-第八天(哈希表(Hash Table))

哈希表的基本概念 哈希表是一种数据结构&#xff0c;用于存储键值对。它的核心思想是将键通过哈希函数转化为索引&#xff0c;然后将值存储在该索引位置的数据结构中。 哈希函数的作用 哈希函数是哈希表的关键部分。它将输入&#xff08;键&#xff09;映射到哈希表的索引位…

Python常用功能的标准代码

后台运行并保存log 1 2 3 4 5 6 7 8 9 nohup python -u test.py > test.log 2>&1 & #最后的&表示后台运行 #2 输出错误信息到提示符窗口 #1 表示输出信息到提示符窗口, 1前面的&注意添加, 否则还会创建一个名为1的文件 #最后会把日志文件输出到test.log文…

卷积神经网络-池化层和激活层

2.池化层 根据特征图上的局部统计信息进行下采样&#xff0c;在保留有用信息的同时减少特征图的大小。和卷积层不同的是&#xff0c;池化层不包含需要学习的参数。最大池化(max-pooling)在一个局部区域选最大值作为输出&#xff0c;而平均池化(average pooling)计算一个局部区…

卷积神经网络-卷积层

卷积神经网络 卷积神经网络&#xff08;convolutional neural network&#xff0c;CNN&#xff09;是一类包含卷积计算且具有深度结构的前馈神经网络&#xff0c;是深度学习的代表算法之一。卷积神经网络具有表征学习能力&#xff0c;能够按其阶层结构对输入信息进行平移不变分…

H5移动端购物商城系统源码 小型商城全新简洁风格全新UI 支持易支付接口

一款比较简单的 H5 移动端购物商城系统源码&#xff0c;比较适合单品商城、小型商城使用。带有易支付接口。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88391704 源码下载2&#xff1a;评论留言或私信留言