【LeetCode刷题(数据结构)】:翻转二叉树

在这里插入图片描述

方法一:递归

思路与算法
这是一道很经典的二叉树问题。显然,我们从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点 root\textit{root}root 的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以 root\textit{root}root 为根节点的整棵子树的翻转
代码

struct TreeNode* invertTree(struct TreeNode* root) {if (root == NULL) {return NULL;}struct TreeNode* left = invertTree(root->left);struct TreeNode* right = invertTree(root->right);root->left = right;root->right = left;return root;
}

复杂度分析

时间复杂度:O(N) 其中 NNN 为二叉树节点的数目。我们会遍历二叉树中的每一个节点,对每个节点而言,我们在常数时间内交换其两棵子树
空间复杂度:O(N) 使用的空间由递归栈的深度决定,它等于当前节点在二叉树中的高度。在平均情况下,二叉树的高度与节点个数为对数关系,即 O(log⁡N)而在最坏情况下,树形成链状,空间复杂度为 O(N)
在这里插入图片描述

其实就是交换一下左右节点,然后再递归的交换左节点,右节点 根据动画图我们可以总结出递归的两个条件如下
终止条件:当前节点为 null 时返回
交换当前节点的左右节点,再递归的交换当前节点的左节点,递归的交换当前节点的右节点

2 迭代

在这里插入图片描述

struct TreeNode* invertTree(struct TreeNode* root){if(root == NULL) return NULL;struct TreeNode* stack[1000];int top = -1;stack[++top] = root;while(top >= 0){struct TreeNode* node = stack[top--];struct TreeNode* temp = node->left;node->left = node->right;node->right = temp;if(node->left != NULL) stack[++top] = node->left;if(node->right != NULL) stack[++top] = node->right;}return root;
}

思路解析:

首先判断根节点是否为空,如果为空则直接返回NULL。
定义一个栈,将根节点入栈。
当栈不为空时,弹出栈顶元素,交换其左右子节点。
如果左子节点不为空,则将其入栈。
如果右子节点不为空,则将其入栈。
重复步骤3-5,直到栈为空。
返回翻转后的二叉树的根节点
在这里插入图片描述

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

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

相关文章

如何在C程序中使用libcurl库下载网页内容

概述 爬虫是一种自动获取网页内容的程序,它可以用于数据采集、信息分析、网站监测等多种场景。在C语言中,有一个非常强大和灵活的库可以用于实现爬虫功能,那就是libcurl。libcurl是一个支持多种协议和平台的网络传输库,它提供了一…

天锐绿盾透明加密、半透明加密、智能加密这三种不同加密模式的区别和适用场景——@德人合科技-公司内部核心文件数据、资料防止外泄系统

由于企事业单位海量的内部数据存储情况复杂,且不同公司、不同部门对于文件加密的需求各不相同,单一的加密系统无法满足多样化的加密需求。天锐绿盾企业加密系统提供多种不同的加密模式,包括透明加密、半透明加密和智能加密,用户可…

解码自然语言处理之 Transformers

自 2017 年推出以来,Transformer 已成为机器学习领域的一支重要力量,彻底改变了翻译和自动完成服务的功能。 最近,随着 OpenAI 的 ChatGPT、GPT-4 和 Meta 的 LLama 等大型语言模型的出现,Transformer 的受欢迎程度进一步飙升。这…

Burstormer论文阅读笔记

这是CVPR2023的一篇连拍图像修复和增强的论文,一作是阿联酋的默罕默德 本 扎耶得人工智能大学,二作是旷视科技。这些作者和CVPR2022的一篇BIPNet,同样是做连拍图像修复和增强的,是同一批。也就是说同一个方向,22年中了…

“传统”开发与AI开发的区别与联系

1、传统开发的算法和软件整体,也可以看成是一个“大模型”,其中有不同层次的处理,最终能够完成从输入到输出的计算,不过,其中的计算都是人工定义的,一般依赖于研究成果的应用。研究成果在实际中的应用处理。…

设计模式:简单工厂模式(C#、JAVA、JavaScript、C++、Python、Go、PHP):

简介: 简单工厂模式,它提供了一个用于创建对象的接口,但具体创建的对象类型可以在运行时决定。这种模式通常用于创建具有共同接口的对象,并且可以根据客户端代码中的参数或配置来选择要创建的具体对象类型。 在简单工厂模式中&am…

MySQL --- 聚合查询

聚合查询相当是行和行之间进行运算。 下文中的所有示例操作都是基于此表: 聚合函数 count(列名) select count(列名) from 表名; 统计该表中该列的行数,但是 null 值不会统计在内,但是如果写为 count(*) null 也会算进去(就算…

系列十、Redis的应用场景

利用Redis中的字符串类型完成项目中手机验证码存储的实现利用Redis中的字符串类型完成项目中具有时效性的业务,例如:12306订票超时未付款自动取消订单、淘宝提交订单后,超过一定时间未付款自动取消订单利用Redis解决分布式系统中Session共享的…

轻松完成Figma导入Sketch的在线方法

众所周知,Figma支持Sketch文件的导入,但Figma不支持Sketch文件的导出,而Sketch不能直接打开Figma文件,在这种情况下,如何将Figma导入Sketch?别担心,其实借助免费的在线工具即时设计,…

在 Android 上恢复已删除音乐的 5 种简单方法

人们经常将重要的音乐文件保存在智能手机上,以方便随时随地收听自己喜欢的曲目。但是,如果这些珍贵的音乐文件因软件故障或硬件故障而被意外删除或丢失怎么办?这将是许多音乐爱好者的噩梦! 如果您也是这些人中的一员,…

动态加载sprite是multiple模式(即该sprite包含了很多小图)里的小图

在Unity中,Resources.Load()方法可以用来加载资源。如果要加载Sprite下的multiple模式的图片,你需要知道这些图片的路径。 首先,你需要把你想要加载的资源放在一个名为"Resources"的文件夹内。然后,你可以使用以下代码…

stm32备份

存储器的分类: 存储器首先根据断电后存储的数据是否会丢失,可以分为易失存储器和非易失存储器,易失存储器主要应用于内存,非易失存储器主要用于外存。 易失存储器以RAM随机存储器为代表,随机的含义是存储器中的数据读取…

SRS Config 一 基础配置

Config srs 流媒体服务配置官方文档已经很详细了,本文仅记录部分配置过程 srs.conf同级目录下 新建 self.conf 仿照srs.conf 添加基础配置 1 rtmp RTMP是直播的事实标准,这么多年以来一直是使用最广泛的直播协议。 然而Adobe公司没有一直更新RTMP协…

icg模块clock gating解析

// 两种形式: 与门形式 或门形式 三个用途: 用于关断时钟,降低功耗用于动态时钟切换是防止毛刺的产生用于时钟分频 解析:与门形式 解析:或门形式

win11 搭建Apache webdav 设置用户名密码 加密授权访问以及多个不同目录访问

Apache webdav 的搭建应该比较简单,但是搭建后还遇到了一些问题,也就是设置了访问用户名密码,咋就不生效呢,苦苦思索两日,终于发现了问题,本文就是分两个方面来编写 一、搭建 1.下载Apache 官网下载: https://www.apachehaus.com/cgi-bin/download.plx 2.下载后解压…

Kubernetes 集群部署 Prometheus 和 Grafana

Kubernetes 集群部署 Prometheus 和 Grafana 文章目录 Kubernetes 集群部署 Prometheus 和 Grafana一.部署 node-exporter1.node-exporter 安装2.部署 node-exporter 二.部署Prometheus1.Prometheus 安装和配置(1)创建 sa 账号,对 sa 做 rbac…

Flow深入浅出系列之更聪明的分享 Kotlin Flows

Flow深入浅出系列之在ViewModels中使用Kotlin FlowsFlow深入浅出系列之更聪明的分享 Kotlin FlowsFlow深入浅出系列之使用Kotlin Flow自动刷新Android数据的策略 Flow深入浅出系列之更聪明的分享 Kotlin Flows 使生命周期对上游流有效,以跳过不必要的工作。这是一…

mmlab 做实验

首先 下载项目完整代码,在pycharm中打开 1. comfig 中有各种网络模型,可以直接使用训练好的预训练模型,尽量不要改动网络模型的结构 2. 18表示网络机构18层,8是每个卡的batch,cifar10 是数据集 3.配置文件解析 4. …

卓望数码--2023.10.16

总体: 提前进去,原本预计30min的面试,面了快60分钟,面的真的巨细节,对基本的八股没有问的很深入,但是,有关测试,实习,项目还是挺多的,基本把所有计算机相关的…

解决github打开慢的问题

1,修改hosts(可以从这个链接 https://raw.hellogithub.com/hosts 获取对应的host配置)。 140.82.112.3 github.com 151.101.1.194 github.global.ssl.fastly.net 2,刷新dns缓存。 # 打开CMD运行如下命令 ipconfig /flushdns 之…