LeetCode热题 翻转二叉树、二叉树最大深度、二叉树中序遍历

目录

一、翻转二叉树

1.1 题目链接

1.2 题目描述

1.3 解题思路

二、二叉树最大深度

2.1 题目链接

2.2 题目描述

2.3 解题思路

三、二叉树中序遍历

3.1 题目链接

3.2 题目描述

3.3 解题思路


一、翻转二叉树

1.1 题目链接

翻转二叉树

1.2 题目描述

1.3 解题思路

根据题目,很显然得出我们就只需要交换除了根的节点的左右孩子。我们这里采用递归解决问题,那么递归的结束条件又是什么呢?当该节点是空节点时就结束。思路就是这样,我们来动手实现一下。

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

二、二叉树最大深度

2.1 题目链接

二叉树最大深度

2.2 题目描述

2.3 解题思路

在上面解决翻转二叉树问题时,我们就用到了递归。在解决二叉树的题目通常都会使用到递归,大家要好好的复习一下递归。我们把这颗二叉树拆解成根和左右子树,后面把左右子树也当作根来继续拆解,直到根为空节点时,就不再进行拆解。递归的结束条件就是根为空节点,因为是最大深度所以我们需要比较左右子树的高度,我们可以定义一个指针来计入高度(为什么用指针,因为要改变计数器要影响到外面,那为什么不用全局变量呢?全局变量比较麻烦),也可以采用另外一种。本人比较懒就采用了另外一种。

struct TreeNode 
{int val;struct TreeNode *left;struct TreeNode *right;
};int maxDepth(struct TreeNode* root) 
{if(root == NULL)return 0;int left = maxDepth(root->left);int right = maxDepth(root->right);return left > right? left+1:right+1;
}

三、二叉树中序遍历

3.1 题目链接

二叉树中序遍历

3.2 题目描述

3.3 解题思路

还是老样子采用递归来解决,首先我们要知道中序是什么,中序是先遍历 左子树、根、再到右子树,根据题目知道我们要返回遍历并且计入了中序顺序的二叉树。只有完全二叉树和满二叉树我们才会采用数组进行实现,一般情况我们都是采用链表的结构来实现二叉树,那我们就需要开辟空间了。我们就会存在一个问题应该开辟多少空间合适呢?可以和之前实现单向链表一样开辟一点点后续不够继续申请空间,这里我有一个不一样的方法那就是我们计算得到有多少个节点就开辟多少个空间。struct TreeNode* root, int* returnSize 题目给了我们两个参数其中一个是二叉树,那另外一个参数有什么用呢?,我感觉int* returnSize是类似一个计数的参数。因为要返回遍历并且计入了中序顺序的二叉树,所以我们可以定义一个数组来储存。那我们就需要封装成另外一个函数来实现了 void preorder(struct TreeNode* root, int* res ,int* returnSize)函数目的实现中序遍历后的储存数据。我们要好好的体会一下,中序遍历的写法 左子树 、根 、右子树。

计算二叉树节点个数:

int TreeSize(struct TreeNode* root)//计算二叉树节点个数
{return root == NULL ? 0 :TreeSize(root->left) + TreeSize(root->right) + 1;
}

实现中序遍历后的储存数据:

void preorder(struct TreeNode* root, int* res ,int* returnSize)
{if(root == NULL){return;}preorder(root->left, res ,returnSize);//左res[(*returnSize)++]=root->val;//根preorder(root->right, res ,returnSize);//右
}

 

void preorder(struct TreeNode* root, int* res ,int* returnSize)
{if(root == NULL){return;}preorder(root->left, res ,returnSize);//左res[(*returnSize)++]=root->val;//根preorder(root->right, res ,returnSize);//右
}int TreeSize(struct TreeNode* root)
{return root == NULL ? 0 :TreeSize(root->left) + TreeSize(root->right) + 1;
}int* inorderTraversal(struct TreeNode* root, int* returnSize) 
{int size = TreeSize(root);int* res = malloc(sizeof(int) * size);*returnSize = 0;preorder(root, res, returnSize);return res;
}

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

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

相关文章

2024.7.30问题合集

2024.7.30问题合集 1.adb调试出现5037端口被占用的情况2.更改ip地址时出现以下问题3.RV1126 ip配置问题 1.adb调试出现5037端口被占用的情况 问题:5037端口被占用的情况 解决方案:将adb文件下的adb.exe和AdbWinApi.dll两个文件复制到C:\Windows\SysWOW6…

设计模式16-代理模式

设计模式16-代理模式 动机定义与结构模式定义结构 代码推导特点应用总结实例说明1. 远程代理2. 虚拟代理3. 保护代理4. 智能引用代理 动机 在面向对象系统中有一些对象由于某种原因比如对象创建的开销很大或者某些操作需要安全控制,或者需要进程外的访问等情况。直…

【嵌入式之RTOS】死锁问题详解

目录 一、什么是死锁 二、产生死锁的四个必要条件 三、避免死锁的方法 四、实际应用中的考虑 一、什么是死锁 死锁(Deadlock)是多任务或多线程环境中一个常见的问题,尤其是在实时操作系统(RTOS)中,如果…

SpringBoot(看这一篇就够了)

目录: SpringBootSpring的缺点什么是SpringBoot?Springboot3 版本要求Springboot的三种构建方式官网搭建通过IDEA脚手架搭建通过Maven搭建项目 SpringBoot的项目结构编写一个测试代码YAML文件自定义配置文件Value读取配置文件ConfigurationProperties读取…

汽车空调歧管压力表的使用

(1)在手动低压阀开启、手动高压阀关闭状态下,低压管路、中间管路与低压表相通开此时可进行从低压侧加注制冷剂或排放制冷剂,并可同时检测高、低侧的压力。 (2)在手动低压阀关闭、手动高压阀开启状态下,高压管路、中间管路与高压表相通&#x…

【网络请求调试神器,curl -vvv 返回都有什么】

curl -vvv 是一个用于在命令行中执行 HTTP 请求的命令,其中 -vvv 是一个选项,用于启用详细的调试输出。 vvv: 这是一个选项,表示启用详细的调试输出。每个 v 增加调试信息的详细程度,vvv 是最高级别的详细输出。 详细输出包括&a…

PDF转Word神器!这四款既免费又好用~

作为当代合格的打工人之一,人手必备的办公技能之一难免就是各种文档的处理,包括了编辑、格式转换等等的基本需要掌握的技能了,其中的pdf转word就可以实现在线免费转换,今天特地通过这篇文章整理了四款免费在线转换的工具&#xff…

七言-绝美崇州

题记 今天,2024年07月30日,在看到《今日崇州》 发布的航拍风光照片之后,这才方知笔者虽已寄居崇州“西川第一天”街子古镇养老逾五年,竟然不知崇州拥有如此之多的青山绿水,集生态、宜居、智慧、文化、旅游丰富资源于一…

学习记录——day22 文件IO

文件IO是使用系统调用(内核提供的函数)来完成数据的读写操作,不提供缓冲区,基于文件描述符操作文件,每进行一次文件io操作,进程就会从用户空间向内核空间进行一次切换,效率没有标准io高。 文件…

Kubernetes 学习记录

https://note.youdao.com/ynoteshare/index.html?idbc7bee305611b52d6900ba209a92bd4d&typenote&_time1694072007342 概览 K8S官网文档:https://kubernetes.io/zh/docs/home/ K8S 是Kubernetes的全称,源于希腊语,意为“舵手”或“…

接口自动化中对于文件上传的处理方法

正常的接口自动化基本都是json的格式,对于文件上传是一种特殊的格式是表单格式针对这种表单格式在接口自动化中怎么处理,主要通过工作中使用的一个实际的例子进行分享 举例:web上需要导入一个文件实现相关的功能,主要通过两个接口…

oracle表、表空间使用空间

文章目录 一、Oracle查询表空间占用情况二、Oracle查询表占用的空间三、Oracle查询表空间使用情况四、Oracle查询每张表占用空间五、表空间大小 TOC 一、Oracle查询表空间占用情况 oracle日常工作中查看表占用空间大小是数据库管理中的基本操作: SELECT a.tablesp…

nginx续1:

八、虚拟主机配置 基于域名的虚拟主机 [rootserver2 ~]# ps -au|grep nginx //查看进程 修改Nginx服务配置,添加相关虚拟主机配置如下 1. [rootproxy ~]# vim /usr/local/nginx/conf/nginx.conf 2. .. .. 3. server { 4. listen …

【SuperMap iServer 服务列表未授权访问漏洞】怎么处理

今天遇到这样一个安全问题需要处理: 漏洞名称: 接口未授权访问。 漏洞URL: https://****/iserver/services 漏洞描述: 多个服务存在未授权访问,可访问清除缓存等功能。 查阅官方社区发现有两个解决办法&#xff1…

在 Vim 编辑器中,如果某个单词被意外地高亮显示,使用:noh可以取消高亮显示

文章目录 1、问题出现的背景2、解决办法 1、问题出现的背景 配置镜像加速器,修改 /etc/docker/daemon.json 目录下的文件,不小心高亮显示https,产生问题的步骤是,我先是按esc键退出vim的编辑模式,然后在https的前面按…

《计算机应用文摘》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问:《计算机应用文摘》是不是核心期刊? 答:不是,是维普收录的正规学术期刊。 问:《计算机应用文摘》级别? 答:省级。主管单位:重庆西南信息有限公司 主办单位&#x…

需求跟踪矩阵:项目管理的“指南针”

前言 在项目的茫茫大海中,需求如同潮汐般汹涌澎湃,而我们则是那驾船的舵手,需要在波涛汹涌中找到正确的航向。如何确保每一个需求都能得到满足,同时又不偏离项目的主线?这就需要我们借助一种强大的工具——需求跟踪矩…

springboot超市商品管理系统-计算机毕业设计源码55289

摘 要 随着信息技术的快速发展和普及,传统的超市管理模式已经无法满足现代商业的需求。为了提高超市的管理效率,优化商品销售流程,本文提出了一种基于SpringBoot框架的超市商品管理系统。该系统结合了现代软件开发技术,包括MySQL数…

【策略工厂模式】记录策略工厂模式简单实现

策略工厂模式 1. 需求背景2. 代码实现2.1 定义基类接口2.2 排序策略接口定义2.3 定义抽象类,实现策略接口2.4 具体的排序策略实现类2.5 实现策略工厂类2.6 控制类 3. 启动测试4. 总结 1. 需求背景 现在需要你创建一个策略工厂类,来根据策略实现各种排序…

第三周:网络应用(上)

一、网络应用(层)内容概述 我们已经知道,Internet的体系结构是符合TCP/IP协议栈的,而“应用层”就在这个协议的最上层。 本讲内容包括: 二、网络应用的基本原理 常见网络应用包括: 问:网络应…