二叉树实战演练

目录

1.二叉树前序遍历---leetcode

思路  +   画图解析: 

2.相同的树的判断 

思路: 

3.对称二叉树 

思路分析: 

4.另一棵树的子树 

思路:

5.二叉树的便利---牛客网

建立二叉树的逻辑图:

总结: 


1.二叉树前序遍历---leetcode

思路  +   画图解析: 

题目要求是将前序遍历的结果放入一个数组里面去,而且leetcode很特殊的就是如果要返回一个数组,那么就必须返回这个数组的大小,所以他给出的接口,一个树这个二叉树的根,还有一个是

这个数组的大小,而且提示说我们还要开创这个数组,需要动态申请,但是,我们也不知道这个二叉树有多少数据,我们就必须先得到这个二叉树的大小,然后将其按照前序顺序放入数组。先知道二叉树的大小,我们创建一个函数来获取。 

如上图所示,我们使用了一个三目表达式,如果根为空,就返回0,如果不为空,就返回他的左节点数 + 右节点数 + 1 。这样我们就能得到这个二叉树的大小了。得到 大小之后就是开辟数组的空间了。

 开辟好数组以后我们就要将这个二叉树按照前序的顺序放入数组了。为了让答案更加清晰可见,我们再封装一个函数将二叉树填入数组。因为我们如果将 i  这个变量在函数里面设值的话就会导致每当执行这个函数时这个变量就要设置一次,为了防止这种现象的发生,我们就要使用传递指针的办法,传递指针可以从根本上解决这个问题,这就是这个题目唯一的难点。

这就是这个题目的最后的结果,我画了这个题目的递归解析图,大家不懂这个代码的意思的时候可以借鉴这个解析图来帮助大家理解,同样,大家也可以画这个图来帮助理解。 

2.相同的树的判断 

这一题的难度较低,我们直接将思路。

思路: 

首先,我们要比较两个根是不是同时为空,是,则返回true,否,则返回false。如果这两个值相同,则往下继续比较,如果不同则返回false。思路简单,代码也简单,我们看代码。

3.对称二叉树 

思路分析: 

其实这题想起来还有点难,但是只要想对了,也就很简单,对称二叉树,我们仔细一点就可以发现其实是先让根和根比较,然后比较根的左节点和另一个根的右节点,就可以得出是不是对称二叉树了。其实也和上面的比较相同的树有点像。

还没有左孩子和右孩子的时候我们就将根和根比较,完全不会影响。 

4.另一棵树的子树 

思路:

这一题就是在树里找树,其实这一题的思路很简单,就是运用我们前面实现的相同的树的判断,当遇到的根节点的值和subroot的根节点的值相同的时候,我们就可以用相同树的判断,如果真的是同一棵树的话就返回true。那么,我们想要这些节点,那就将所有的根节点都遍历一遍和subroot的根节点比较。思路就是这样,我们开始实现。 这就是这个题目的解法。和前面的知识夹杂着一起考察。

5.二叉树的便利---牛客网

 这一题的大概意思是这样的,题目给了我们一个字符串,#代表的是NULL,然后让我们根据这个字符串去建立一个二叉树,并且用中序的方法将他输出到我们的屏幕上。所以我们要做这样几件事,第一,我们要根据字符串来建立一个二叉树,第二,根据二叉树用中序输出。

建立二叉树的逻辑图:

 我们获得一个字符串怎么将他建立成一个二叉树呢?

这个图就是按照前序的方法,将其建立成一个二叉树,大家可以按照我再上面标记的箭头来捋清楚这个思路。

这个就是按照我上面的思路写出的代码。

总结: 

这五个题目都是围绕二叉树的题目,围绕二叉树的题目自然离不开递归思想,这个在五个题目里面每个都有用到,也是我们必须掌握的思想。望大家看了这篇文章之后都能有一定的收获。

一起加油吧!!! 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python3 笔记:部分专有名词解释

1、python 英 /ˈpaɪθən/ 这个词在英文中的意思是蟒蛇。但据说Python的创始人Guido van Rossum(吉多范罗苏姆)选择Python这个名字的原因与蟒蛇毫无关系,只是因为他是“蒙提派森飞行马戏团(Monty Python's Flying Ci…

Softing工业将亮相2024年阿赫玛展会——提供过程自动化的连接解决方案

您可于2024年6月10日至14日前往美因河畔法兰克福11.0号馆,Softing将在C25展位展出,欢迎莅临! 作为工业应用中数据交换领域公认的专家,Softing工业致力于帮助各行各业的客户部署网络自动化和优化生产流程。 使用Softing产品&…

什么是DNS缓存投毒攻击,有什么防护措施

随着企业组织数字化步伐的加快,域名系统(DNS)作为互联网基础设施的关键组成部分,其安全性愈发受到重视。然而,近年来频繁发生的针对DNS的攻击事件,已经成为企业组织数字化发展中的一个严重问题。而在目前各…

基于Go实现的分布式主键系统

基于Go实现的分布式主键系统 摘要 随着互联网的发展,微服务得到了快速的发展,在微服务架构下,分布式主键开始变得越来越重要。目前分布式主键的实现方式颇多,有基于数据库自增的、基于UUID的、基于Redis自增的、基于数据库号段的…

Day3: LeedCode 203. 移除链表元素 707. 设计链表 206. 反转链表

详细讲解移步:Day3: LeedCode 203. 移除链表元素 707. 设计链表 206. 反转链表-CSDN博客 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入&a…

Mybatis源码剖析---第一讲

Mybatis源码剖析 基础环境搭建 JDK8 Maven3.6.3&#xff08;别的版本也可以…&#xff09; MySQL 8.0.28 --> MySQL 8 Mybatis 3.4.6 准备jar&#xff0c;准备数据库数据 把依赖导入pom.xml中 <properties><project.build.sourceEncoding>UTF-8</p…

关于阳光雨露外派联想的面试感想

最近在找工作&#xff0c;接到了一个阳光雨露外派联想的面试邀请。说实在的一开始就有不对劲的感觉。想必这就是大厂的自信吧&#xff0c;上就问能不能现场面试&#xff0c;然后直接发面试邀请。这时候我倒是没觉得有啥问题。 然后今天就去面试去了&#xff0c;住的比较偏&…

CSS demo演示 20240524

说明&#xff1a;不修改父盒子的样式&#xff0c;只在子盒子上设置定位&#xff0c;让子盒子定位在父盒子右侧。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style>…

Docker快速部署Seata的TC服务以及微服务引入Seata教程

目录 一、使用docker部署Seata的TC服务 1、拉取TC服务镜像 2、创建并运行容器 ​3、修改配置文件 4、在Nacos中添加TC服务的配置 5、重启TC服务 二、微服务集成Seata 1、引入依赖 2、修改配置文件 Seata是阿里的一个开源的分布式事务解决方案&#xff0c;能够为分布…

2024 电工杯高校数学建模竞赛(B题)数学建模完整思路+完整代码全解全析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024电工杯数学建模竞赛&#xff08;B题&#xff09;的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有详尽的建模过程和解…

设置 sticky 不生效?会不会是你还是没懂 sticky?

官方描述 基本上可以看懂的就会知道。sticky 是相对于存在滚动条的内容的&#xff0c;啥意思&#xff1f; 就是不论你被谁包着&#xff0c;你只会往上找有 overflow 属性的盒子进行定位&#xff0c;包括&#xff1a;overflow:hidden; overflow:scroll; overflow:auto; overflo…

PMP 学习笔记(增量更新中)

PMP 作为最流行的项目管理方法论&#xff0c;是项目管理领域的对话基础&#xff0c;了解它能帮助我理解术语和规范的管理过程&#xff0c;也许后面会考一个认证。感谢 B 站视频《 PMP 认证考试课程最新完整免费课程零基础一次通过项目管理 PMP 考试》的作者&#xff0c;我通过它…

山脉数组的峰顶索引 ---- 二分查找

题目链接 题目: 分析: 我们很明显, 可以从峰值位置将数组分成两段, 具有"二段性", 所以可以用二分查找因为arr是山峰数组, 不存在相等的情况如果arr[mid] > arr[mid 1], 说明mid的位置可能是峰值, 移动right mid如果arr[mid] < arr[mid 1], 说明mid的位置…

【ZYNQ】GPIO 与 AXI GPIO

在嵌入式开发中&#xff0c;GPIO 是最常见的外设。GPIO 是 General Purpose I/O 的缩写&#xff0c;译为通用输入/输出。GPIO 用于连接外部设备&#xff0c;例如按键、传感器等&#xff0c;实现数字信号的输入或输出功能。本文主要介绍 Zynq GPIO 的基本概念&#xff0c;并对比…

物理服务器介绍

物理服务器介绍 概述分类按服务器应用分类按服务器结构分类塔式服务器机架式服务器刀片式服务器机架式服务器与刀片式服务器的对比按处理器个数分类按处理器架构分类 主板概述工作原理物理结构技术参数 CPU概述工作原理指令集相关技术技术参数主流产品 内存概述类型相关技术技术…

Python中文件操作和异常处理

文章目录 一、文件操作1.概念2.文件3.二进制 二、基本文件操作三、乱码产生四、with open() as f五、代码实现文件复制粘贴六、try ... except ...七、代码比较 一、文件操作 1.概念 帮助我们把爬虫抓下来的数据&#xff0c;进行保存。 2.文件 在计算机中&#xff0c;没有p…

副业树洞聊天项目/树洞倾诉/陪陪系统源码/树洞源码下载搭建

随着社会的发展和人们生活水平的提高&#xff0c;越来越多的人在面临心理压力、情感困扰或生活困境时&#xff0c;需要一个可以宣泄、倾诉和寻求支持的平台。而传统的人际交往方式往往会遇到难以排解的问题&#xff0c;比如担心被他人知晓自己的隐私等&#xff0c;这就导致了人…

Java期末复习指南(1):知识点总结+思维导图,考试速成!

&#x1f516;面向对象 &#x1f4d6; Java作为面向对象的编程语言&#xff0c;我们首先必须要了解类和对象的概念&#xff0c;本章的所有内容和知识都是围绕类和对象展开的&#xff01; ▐ 思维导图1 ▐ 类和对象的概念 • 简单来说&#xff0c;类就是对具有相同特征的一类事…

Leaflet【三】图层组 geoJson 热力图

图层组 LayerGroup 用于将几个图层分组并作为一个整体处理。如果你把它添加到地图上&#xff0c;任何从该组中添加或删除的图层也会在地图上添加/删除。 L.layerGroup([marker1, marker2]).addTo(map);使用图层组有什么好处呢&#xff1f;这个在后面有说到&#xff0c;这里的…

Unity射击游戏开发教程:(19)控制生命进度条

在这篇文章中,我们将讨论如何添加一个不是条形而是心形的生命条。这种方法不使用 UI 滑块,而是使用 UI 图像。 第一步是创建要填充的栏的轮廓。我使用 Aseprite 制作像素艺术,并慢慢地将我的太空射击游戏转变为经典的像素街机游戏。