树与二叉树堆:经典OJ题集

目录

查找值为x的结点:

思路分析:

单值二叉树: 

示例: 

 思路分析: 

相同的树:

示例: 

思路分析: 

二叉树的前序遍历:——使用前序遍历把结点元素放入数组中 

题目:

示例: 

思路分析: 

代码调用图 

通过前序遍历的数组构建二叉树 :

题目:

通过前序遍历的数组"ABD##E#H#CF##G##"构建二叉树

思路分析: 

代码调用图 

总结:


查找值为x的结点:

使用前序、中序后序中的一种对二叉树进行遍历,查找出值为x的结点 

思路分析:

在前中后序中,前序和中序、后序相比在调用递归的次数和返回重复结点的次数较少,所以采取前序遍历进行遍历查找。

查找值为x的结点,可以转变为查找结点以及结点的左右孩子结点的元素是否等于x,而左右孩子结点也有它们的左右孩子,于是最后就将问题化解成了查看当前结点的值是否等于x

  • 而若找到了值等于x的结点,则返回上一个结点,并使用上一个结点的指针指向,且需要使用临时变量接收。
  • 且根据前序遍历的方法,可以将当结点等于NULL作为结束条件,表示当前左右子树走完,当前子树并没有等于x的结点。

单值二叉树: 

题源:965. 单值二叉树 - 力扣(LeetCode) 

  • 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false

示例: 

 思路分析: 

  • 根据二叉树的结构划分和等值传递原理,本问题可以化解为根结点是否和左右孩子结点有相等的元素,而左右孩子也具有它们自己的左右孩子结点
  • 所以到最后本问题就变成了查看根结点是否等于左孩子结点的元素,是否等于右孩子结点的元素。
  • 也就是说,当根结点元素和左右孩子中的一个孩子结点元素不相同就返回fasle,但是如果相同就需要进入左右孩子结点,去判断它们是否与它们的左右孩子结点元素是否相同。

需要注意的是,有一些结点是只有左孩子结点的,没有右孩子结点,遇到这种情况,也就是当root==NULL时,返回的是true

相同的树:

题源:100. 相同的树 - 力扣(LeetCode) 

  • 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。
  • 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例: 

思路分析: 

需要判断两颗树是否在结构上和元素上相同,那么就需要同时遍历两棵树

而将本问题化解为最简易的问题那便是查看两个根结点是否同时存在,在两个根结点同时存在的时候:

同时判断两个根结点的左右孩子结点又是否同时存在:

  • 如果一方的左孩子结点或者右孩子结点不存在,而另一方的左孩子结点或者右孩子结点存在,那结构就不一样了,所以返回false

若两个根结点的左右孩子结点同时存在,则就同时判断两个根结点的左孩子结点的值是否相同,判断两个根结点的右孩子结点的值是否相同:

  • 如果不相同就返回false
  • 如果相同则进入各自的左右孩子结点进行判断它们的左右孩子结点是否一样。

二叉树的前序遍历:——使用前序遍历把结点元素放入数组中 

题源:144. 二叉树的前序遍历 - 力扣(LeetCode) 

题目:

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

示例: 

思路分析: 

因为需要把结点元素存储到数组中,所以我们需要创建数组,同时数组的大小要等于结点的个数,防止空间浪费和空间不足,因此在外另设一个函数进行递归调用计算树的结点个数以此来创建数组 

  • returnsize 是表是数组的大小 ,a是数组名

  • 再创建一个函数用来递归使用 

因为采取了前序遍历进行存储,所以利用了前序遍历,且直接将原先前序遍历的打印变成了将元素存储到数组内 

原前序遍历:树与二叉树堆:链式二叉树的实现-CSDN博客

代码调用图 

通过前序遍历的数组构建二叉树 :

题目:

通过前序遍历的数组"ABD##E#H#CF##G##"构建二叉树

思路分析: 

1、因为我们要构建二叉树,所以使用创造二叉树的函数 malloc ,因为要把数组的元素交给二叉树的结点,所以需要进行数值的传递。

2、而其次,因为使用的是前序遍历,所以是在前序遍历的方法上进行改造。

3、同时如上图所示,我们构建的二叉树是用 # 来表示最叶子结点的,于是我们可以采用结点是否是 # 来表示递归的返回条件

4、但因为是数组,所以即便是 # 也可能是在数组的中间,所以数组的下标或者说指向数组元素的指针也应该要进行前进。 

  •  a是数组名,pi是指向数组元素的指针可以看作是下标

代码调用图 


总结:

对于二叉树的递归调用而言,本质上分为了三个部分,第一个是判断二叉树逐级返回的条件,一般摆在前端,第二个是要在递归调用中指向的代码程序,第三是递归调用

而二叉树的递归调用一般是以划分成根、左右子树、左右孩子结点之间的关系,来进行大事化小的管理分化。 


 

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

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

相关文章

塑料注塑件自动化光学测量蓝光自动化三维检测解决方案-CASAIM-IS(2ND)

一、背景介绍 在塑料制品的生产过程中,注塑件的质量对于产品的整体质量和性能至关重要。然而,通过使用三坐标、卡尺、千分尺等量具,对工件进行单点或人工检测其加工精度,对复杂形位公差检测目前比较难取得数据,无法快…

SpringSecurity6怎么用

SpringSecurity依赖 <!--SpringSecurity起步依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency> jwt依赖 <!--jwt令牌--> <depend…

WordPress文章防复制代码

通过下面的JS代码&#xff0c;可以有效地防止别人直接复制拷贝你的文章&#xff0c;用frame标签引用你的文章时&#xff0c;会自动跳转到文章正常链接&#xff0c;同时禁止右键菜单。 使用方法一&#xff1a; 打开当前主题头部模 板header.php找到&#xff1a;<?php wp_h…

力扣11题 盛最多水的容器 双指针算法

11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明 你不能倾斜容器. 示…

React Native环境搭建及Hello World

写这篇博客的目的就是想说,react native 挺简单,但是大部分初级前端会被环境搭建给难住,从而放弃. 环境搭建 环境搭建其实说简单也挺简单的,有经验的前端直接翻看react native中文文档就行,直接按上面来肯定没错 以下以安卓开发,windows配置环境为例,来演示一遍 首先 电脑…

架构的模式

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容&#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作…

自定义BeanPostProcessor之XssBeanPostProcessor

什么是BeanPostProcessor BeanPostProcessor是Spring框架中的一个重要的扩展点&#xff0c;它允许开发者在Bean初始化前后对Bean进行自定义处理。Spring中有很多内置的BeanPostProcessor&#xff0c;如AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcess…

NX二次开发UF_MTX2_identity 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_MTX2_identity Defined in: uf_mtx.h void UF_MTX2_identity(double identity_mtx [ 4 ] ) overview 概述 Returns a 2 x 2 identity matrix. 返回一个2 x 2的单位矩阵。 UFUN…

【目标检测】进行实时检测计数时,在摄像头窗口显示实时计数个数

这里我是用我本地训练的基于yolov8环境的竹签计数模型&#xff0c;在打开摄像头窗口增加了实时计数显示的代码&#xff0c;可以直接运行&#xff0c;大家可以根据此代码进行修改&#xff0c;其底层原理时将检测出来的目标的个数显示了出来。 该项目链接&#xff1a;【目标检测…

怎样搭建好Google关键词广告账号结构

搭建好Google关键词广告账号结构对于实现广告效果的最大化至关重要。本文小编将为您提供一些关于如何搭建好Google关键词广告账号结构的建议和步骤。 1、设定目标和策略 在开始搭建广告账号结构之前&#xff0c;首先需要明确您的广告目标和策略。您想要增加网站流量还是提高转…

周报:css相关扩展知识

目录 1. 扩展知识&#xff1a;浮动盒子的排列位置 浮动盒子常见排列特点&#xff1a; 浮动盒子扩展特点&#xff1a; 2.扩展知识:行高的取值 line-height常见取值&#xff1a; 行高的取值的方式&#xff1a; 两个方式的区别&#xff1a; 3.扩展知识&#xff1a;body背景…

Linux自启服务提示:systemd[1]: *.service: main process exited, code=exited, status=1问题

这两天一直在沉迷于配脚本&#xff0c;由于服务器很多&#xff0c;所以我都是从一台服务器上配置好的脚本直接copy到另一台服务器&#xff0c;按说完全一样的脚本一样的操作&#xff0c;那么应该是一样的执行结果 but, Gul’dan&#xff0c;代…我重启服务器后服务并没有正常启…

2000-2021年各省人口密度数据

2000-2021年各省人口密度数据 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;地区、年份、年末常住总人口(万人&#xff09;、面积&#xff08;平方千米&#xff09;、人口密度&#xff08;人/平方千米&#xff09; 3、来源&#xff1a;各省年鉴、统计年鉴、各省统计局…

如何动态获取当前执行的Python脚本名?

文章目录 1、情景描述2、如何获取调用者脚本名&#xff1f;3、sys._getframe()总结 1、情景描述 当我们在使用Python进行一些操作时&#xff0c;如果我们希望我们封装的模块里的方法能够在给使用者调用的同时可以获取到调用者当前正在执行的Python脚本名&#xff0c;以做一些后…

门户网站二级等保评测问题,服务器漏洞问题解决办法

二级等保查出来的服务器问题 操作前可在自己服务器测试一下&#xff0c;看看有没有用 1.服务器定时更换密码 永久&#xff08;需重启&#xff09; vim /etc/login.defs PASS_MAX_DAYS 90 # 密码最长过期天数 PASS_MIN_DAYS 0 # 密码最小过期天数 PASS_MIN_LEN 10 # 密码…

Conda 安装Jupyter:使用Pyhive(Kerberos)

安装基本环境 conda create -n bigdata python3.10 conda activate bigdata conda install -y pandas numpy pyhive yum install gcc-c python-devel.x86_64 cyrus-sasl-devel.x86_64 pip install sasl Jupyter Notebook 安装jupyter notebook配置自动提示 conda insta…

JavaScript中的时间日期函数new Date()(JS中5种获取时间戳的函数)

简介&#xff1a;JavaScript 中的 new Date() 方法用于创建一个新的 Date 对象&#xff0c;该对象表示当前日期和时间。Date 对象提供了许多方法和属性&#xff0c;可以用于获取和设置日期和时间信息。 new Date([year, month, day, hour, minute, second, millisecond]) 其中…

重生奇迹mu武器镶嵌顺序

一、武器的镶嵌顺序&#xff1a; 雷冰火30%概率出现技能11 从上到下的镶嵌顺寻按照雷、冰、火镶嵌&#xff0c;就有30%的概率出现技能攻击力加11的幸运荧光属性。 从上到下的镶嵌顺寻按照火、冰、雷镶嵌&#xff0c;就有30%的概率出现攻击力加11的幸运荧光属性。 例如&…

【图像拼接(Image Stitching)】关于【图像拼接论文精读】专栏的相关说明,包含专栏使用说明、创新思路分享等(不定期更新)

文章目录 前言专栏简介适用人群使用方法阅读顺序潜在的创新方向【图像拼接论文精读】专栏文章目录 前言 为什么会有这篇文章&#xff1f; 因为专栏简介里写不下太多东西&#xff0c;只能通过这篇文章和大家交流&#xff0c;算是一个专栏阅读指南吧。 说点心里话 本来吧&…

Hi-Net:用于多模态MR图像合成的混合融合网络

Hi-Net: Hybrid-Fusion Network for Multi-Modal MR Image Synthesis Hi-Net&#xff1a;用于多模态MR图像合成的混合融合网络背景贡献实验方法the modality-specific network&#xff08;模态特定网络&#xff09;multi-modal fusion networkmulti-modal synthesis network 损…