leetcode-----二叉树习题

 目录

前言

1. 二叉树的中序遍历

2. 相同的树

3. 二叉树的最大深度

4. 二叉树的最小深度

5.二叉树的前序遍历

6. 二叉树的后序遍历

7. 对称二叉树


前言

        前面我们学习过了二叉树的相关知识点,那么今天我们就做做练习,下面我会介绍几道关于二叉树的leetcode习题,我们一起来看看吧!

二叉树相关链接:

二叉树的基本操作:数据结构-----二叉树的基本操作-CSDN博客

二叉树的创建和遍历:数据结构-----二叉树的创建和遍历-CSDN博客

二叉树的基础知识点:数据结构-----树和二叉树必知必会知识_Gretel Tade的博客-CSDN博客

堆的相关方法代码实现:数据结构-----堆(完全二叉树)-CSDN博客

1. 二叉树的中序遍历

 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

思路分析:

 这道题是这样要求的,给入一个int类型的指针num,要求去进行动态空间的分配为数组,然后去进行中序遍历二叉树节点,把得到的数据存入到这个数组里面去,最后输出这个数组,也就是说中序遍历的同时还会去拿到数据进行储存。

 代码实现:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/void travel(struct TreeNode* root, int*num,int*returnSize){if(!root)return;travel(root->left,num,returnSize);num[*returnSize]=root->val;*returnSize+=1;travel(root->right,num,returnSize);
}
/*** Note: The returned array must be malloced, assume caller calls free().*/
int* inorderTraversal(struct TreeNode* root, int* returnSize){int* num=(int*)malloc(sizeof(int)*100);*returnSize=0;if(!root)return NULL;travel(root,num,returnSize);return num;}


2. 相同的树

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

思路分析:

 要判断是否相同的树,就要判断同一个位置的节点是否存在,存在的同时里面的值是否相同,那就分以下三种情况。第一:节点都不存在,那么这就是满足条件true;第二:一个节点存在一个不存在,那就是false;第三:里面的值不同,结果还是false。对以上的三种情况进行左子树和右子树遍历取和运算即可。

代码实现:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
bool isSameTree(struct TreeNode* p, struct TreeNode* q){if(!p&&!q)return true;if(!p||!q)return false;if(p->val!=q->val)return false;return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
}

3. 二叉树的最大深度

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

思路分析:

获取最大深度,那就是每次向左右子树进行遍历,取每次遍历一层就进行深度+1,最后递归到根节点的时候,比较此时左右子树当前深度的大小,取其中大的一个返回即可。

 代码实现:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/int maxDepth(struct TreeNode* root){if(!root){return 0;}int l=maxDepth(root->left);int r=maxDepth(root->right);if(l>r)return l+1;elsereturn r+1;
}

4. 二叉树的最小深度

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。

思路分析:

跟上面求最大深度不同,这里就要去分三种情况来讨论了,首先就是如果这个树只有右子树没有左子树,那么返回的值就是从右子树遍历的结果;如果只有左子树没有右子树,那么返回的深度也就是左子树遍历的结果,如果左右子树都有的话,那么返回的深度就是其中较小者的值。

代码实现:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
int minDepth(struct TreeNode* root){if(!root){return 0;
}else if(!root->left&&root->right)return minDepth(root->right)+1;else if(!root->right&&root->left)return minDepth(root->left)+1;else {int l=minDepth(root->left);int r= minDepth(root->right);if(l>r)return r+1;elsereturn l+1;}
}


5.二叉树的前序遍历

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 

思路分析:

跟中序遍历是一样的,先进行分配储存数据的数组空间,然后进入到前序遍历的过程中,一边储存数据,一边遍历,最后的遍历结果就是直接输出这个数组储存到的数据即可。

 代码实现:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
/*** Note: The returned array must be malloced, assume caller calls free().*/
void travel(struct TreeNode* root, int *num,int* returnSize)
{if(!root)return;num[*returnSize]=root->val;*returnSize+=1;travel(root->left,num,returnSize);travel(root->right,num,returnSize);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize){int* num=(int*)malloc(sizeof(int)*100);*returnSize=0;travel(root,num,returnSize);return num;}


6. 二叉树的后序遍历

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 

思路分析:

方法还是跟上面一样的,通过分配储存数据数组的空间来储存当前后序遍历的结果。

 代码实现:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*//*** Note: The returned array must be malloced, assume caller calls free().*/void travel(struct TreeNode* root, int *num,int* returnSize)
{if(!root)return;travel(root->left,num,returnSize);travel(root->right,num,returnSize);num[*returnSize]=root->val;*returnSize+=1;
}
int* postorderTraversal(struct TreeNode* root, int* returnSize){int *num=(int*)malloc(sizeof(int)*500);*returnSize=0;travel(root,num,returnSize);return num;
}


7. 对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。

思路分析:

判断一个二叉树是否为对称二叉树也就是以根结点为对称轴进行划分比较,同样的分一些几种情况去讨论。1.如果此时对称位置的节点都为空,那么结果就是true;2.如果对称位置节点一个为空一个不为空,那结果就是false;3.如果对称位置节点的值不同,那结果也是false;4.最后就是如果对称位置的节点都存在而且里面的数据值也是相同的,那么就进行往下遍历,最后进行取和运算结果即可。

代码实现:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/bool check(struct TreeNode* p,struct TreeNode* q){if(!p&&!q)return true;if(p==NULL||!q)return false;if(p->val!=q->val)return false;elsereturn check(p->left,q->right)&&check(p->right,q->left);
}
bool isSymmetric(struct TreeNode* root){return check(root,root);
}

 好了,以上就是本期习题的全部内容了,我们下一期再见!

 分享一张壁纸:

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

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

相关文章

大数据Flink(九十三):DML:Order By、Limit 子句

文章目录 DML:Order By、Limit 子句 一、Order By 子句

idea Springboot 校园助学贷款系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 校园助学贷款系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统 具有完整的源代码和数据库&…

ASUS华硕天选4笔记本电脑FX507VV原厂Windows11系统

下载链接:https://pan.baidu.com/s/1W9tedHI3iFjaHju5eLkQ6g?pwd8dl2 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、华硕电脑管家、奥创控制中心等预装程序 由于时间关系,绝大部分资料没有上传,不是想要的型号,请联系客服获取。

嵌入式Linux应用开发-第十四章查询方式的按键驱动程序

嵌入式Linux应用开发-第十四章查询方式的按键驱动程序 第十四章 查询方式的按键驱动程序_编写框架14.1 LED驱动回顾14.2 按键驱动编写思路14.3 编程:先写框架14.3.1 把按键的操作抽象出一个button_operations结构体14.3.2 驱动程序的上层:file_operation…

竞赛选题 大数据商城人流数据分析与可视化 - python 大数据分析

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于大数据的基站数据分析与可视化 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度…

优化 Node.js 性能:检测内存泄漏和高 CPU 使用率

优化 Node.js 性能:检测内存泄漏和高 CPU 使用率 Node.js 是一种流行的 JavaScript 运行时,以其速度、性能和可扩展性而闻名。然而,即使是优化和编写得非常好的 Node.js 应用程序也可能会遇到性能问题,例如内存泄漏和 CPU 使用率…

yolov8 opencv模型部署(C++版)

yolov8 opencv模型部署(C 版) 使用opencv推理yolov8模型,仅依赖opencv,无需其他库,以yolov8s为例子,注意: 使用opencv4.8.0 !使用opencv4.8.0 !使用opencv4.8.0 &#…

Python函数语法与面向对象回顾(精华)

目录 函数 语法定义 返回值 位置参数 关键字传递 默认参数 函数参数中 / 作用 lambda表达式 递归函数 面向对象 初识对象 继承 构造函数 ​编辑 多态 "私有属性" 动态 类方法和静态方法 函数 语法定义 pyhon的函数定义语法是 def 函数名(参数…

基于SpringBoot的师生共评的作业管理系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 课程管理 作业管理 作业互评 小组管理 作业管理 作业评分 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网信息的飞速发展,无纸化作业变成了一种趋势,针对这个问题开发一个…

蓝桥等考Python组别十级003

第一部分:选择题 1、Python L10 (15分) 已知s Pencil,下列说法正确的是( )。 s[0]对应的字符是Ps[1]对应的字符是ns[-1]对应的字符是is[3]对应的字符是e 正确答案:A 2、Python L10 &am…

【GDB】 command 命令

GDB command 命令 语法 command 命令是一个很好用的调试命令,它配合断点使用,可以在指定的断点执行预先设置的命令 其语法为:command bread_id,这样会提示你输入你要执行的命令,以 end 结束。这个 bread_id 就是用 …

【Axure】Axure的常用功能

选择 分为相交选中和包含选中 相交选中:部分选中即是选中包含选中:全选才是选中 缩放 按住元件四角,等比例缩放 置顶和置底 所谓置于顶层就是不被后来的元件覆盖住,置于底层的意思则相反 组合、对齐、分布 组合&#xff1…

Java安全之servlet内存马分析

目录 前言 什么是中间键 了解jsp的本质 理解servlet运行机制 servlet的生命周期 Tomcat总体架构 查看Context 的源码 servlet内存马实现 参考 前言 php和jsp一句话马我想大家都知道,早先就听小伙伴说过一句话木马已经过时了,现在是内存马的天下…

Spring MVC 十:异常处理

异常是每一个应用必须要处理的问题。 Spring MVC项目,如果不做任何的异常处理的话,发生异常后,异常堆栈信息会直接抛出到页面。 比如,我们在Controller写一个异常: GetMapping(value"/hello",produces{&qu…

搭建前端框架

在终端进入web目录,然后创建vuecrud工程 创建工程并引入ElementUI和axios手把手教学>传送门:VueCLI脚手架搭建

2023.09.30使用golang1.18编译Hel10-Web/Databasetools的windows版

#Go 1.21新增的 log/slog 完美解决了以上问题,并且带来了很多其他很实用的特性。 本次编译不使用log/slog 包 su - echo $GOPATH ;echo $GOROOT; cd /tmp; busybox wget --no-check-certificate https://go.dev/dl/go1.18.linux-amd64.tar.gz;\ which tar&&am…

驱动插入中断门示例代码

驱动插入中断描述符示例代码 最近做实验,每次在应用层代码写测试代码的时候都要手动挂一个中断描述符,很不方便所以就想着写个驱动挂一个中断门比较省事 驱动测试效果如下: 下面的代码是个架子,用的时候找个驱动历程传递你要插…

搭建智能桥梁,Amazon CodeWhisperer助您轻松编程

零:前言 随着时间的推移,人工智能技术以惊人的速度向前发展,正掀起着全新的编程范式革命。不仅仅局限于代码生成,智能编程助手等创新应用也进一步提升了开发效率和代码质量,极大地推动着软件开发领域的快速繁荣。 当前…

小白继续深入学习C++

第1节 指针的基本概念 1、变量的地址: 变量是内存地址的简称,在C中,每定义一个变量,系统就会给变量分配一块内存,内存是有地址的。 C用运算符&获取变量在内存中的起始地址。 语法: &变…

如果在 Mac 上的 Safari 浏览器中无法打开网站

使用网络管理员提供的信息更改代理设置。个人建议DNS解析,设置多个例如114.114.114.114 8.8.8.8 8.8.4.4 如果打不开网站,请尝试这些建议。 在 Mac 上的 Safari 浏览器 App 中,检查页面无法打开时出现的信息。 这可能会建议解决问题的…