二叉树的重要概念

news2024/9/22 9:48:22

前言:

二叉树是树形结构的一个重要类型,一般的树也可以转化成二叉树来解决问题。在数据结构的系统中,树形结构也是信息存储和遍历的重要实现,二叉树的最大特点就是一个根包含着左右子树的形式,许多具有层次关系的问题几乎都可以用二叉树来解决。

一、树的概念

树是一种非线性结构,由n(n >=0)个有限节点组成的具有层次关系的集合。树有一个特殊的节点,该节点没有前驱节点,称为根节点。除了根节点之外,每颗子树都有且仅有一个前驱节点,(0<=n<=2)个子节点。在树形结构中,子树之间不能有交集,否则成环就不是子树树也是基于递归来实现的。

节点的度:当前节点拥有的子树个数称为节点的度,如节点1的度为2

树的度:所有节点的度的最大值称为树的度(二叉树不存在度大于二的节点)

叶子结点(终端结点):度为0的节点称为叶子结点,如4,5,6,7

双亲结点(父结点):子节点的前驱节点称为父结点,如1是2的父结点

子节点(孩子节点):父节点的后继节点称为子节点,如1的子节点是2和3

根节点:没有前驱节点,如1

节点的层:从根开始,根为第一层,依次往下

树的高度(深度):树的最大层次,如图高度为3

分支结点(非终端结点):度不为0的节点

节点祖先:从根到该阶段所经过分支上的所有节点,如1为所有节点祖先

子孙:从根到该节点的子树中任意节点都称为该节点的子孙,所有节点为1节点的子孙

森林:由n(n>=0)个不相交的树组成的集合

二、二叉树的节点的存储形式

二叉树的存储通常分为顺序存储和链式存储,顺序存储可以利用栈和队列的特性根据遍历来实现(下面会提到),还有一种就是链式存储,如下图:

链式存储又分为二叉表示方式和三叉表示方式:二叉表示包括着数据域,还有左子域和右子域,左右子域代表着当前节点的左右孩子为根的左右子树。三叉表示比二叉表示多了一条双亲节点域,也就是前驱指针域,来记录着当前节点的根节点。

三、俩种特殊的二叉树

(1)满二叉树

一颗二叉树,每层节点都达到最大值,则可以称这棵树为满二叉树。k层的节点数为2^k - 1。

(2)完全二叉树

完全二叉树就是当每个节点都与高度为k的满二叉树的节点按顺序一一对应。通俗来讲就是最后一层节点数可以不达到最大值,但要按顺序对应起来。

如图就不是一颗完全二叉树。满二叉树也算是一种特殊的完全二叉树

四、二叉树的性质

(1)在非空二叉树的第i层最多有2^(i-1)个节点。

(2)深度为k的满二叉树的节点数就是深度为k的普通二叉树的最大节点数。

(3)对于一颗二叉树,若叶子节点个数为n0,对于度为2的非叶子节点(n2)则有n0=n2+1

(4)具有n个节点的完全二叉树深度k为log2(n+1)(向上取整)。

(5)对于n个节点的完全二叉树,若按照层序遍历的方式给节点从0开始编号,对于序列号为i的节点具有以下特点:

i > 0 双亲节点序号为 (i- 1)/2。

若是都存在有左右孩子节点,则有左孩子序号:2i+1 ;右孩子序号:2i+2。

五、二叉树的遍历方式

(1)前序中序后序遍历

前序遍历:遍历规则为访问 根 -> 左-> 右

A-B-D-G-C-E-F

中序遍历:遍历规则为访问 左 -> 根-> 右

G-D-B-A-E-C-F

后续遍历:遍历规则为访问 左 -> 右-> 根

G-D-B-E-F-C-A

二叉树的遍历规则通常是通过递归定义的,前中后序遍历代码实现则为:

依次按照遍历顺序递归即可。

(2)层序遍历

层序遍历是按照从上到下从左到右的顺序来遍历的

A-B-C-D-E-F-G

层序遍历则需要依靠队列来完成:

代码实现:

六、二叉树的基本操作

先定义好节点类型,再定义一个树的根节点root

操作方法

获取树的节点数:

1.可以通过前序遍历的思路来统计树的节点

2.还有一种方法可以让代码更加简洁,可以利用返回值的方法来完成递归统计操作:

代码如下:

获取叶子节点的个数:

1.通过遍历的方法来递归统计叶子节点,结束条件为当前节点为空,统计条件为左右子树都为空。

2.也可以利用返回值来统计叶子节点。

代码实现:

获取第k层的节点数:

利用返回值和层数的层层递减来统计第k层的节点数,结束条件是节点为空,统计条件是k=1的节点不为空。

代码实现:

获取二叉树高度:

通过层层遍历关系决出左右子树的最大高度,再加上自身高度返回。

代码实现:

查找value值是否存在:

这个单纯就是找到返回节点,只需要遍历就行,结束条件不为空即可。

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

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

相关文章

单元测试注解:@ContextConfiguration

ContextConfiguration注解 ContextConfiguration注解主要用于在‌Spring框架中加载和配置Spring上下文&#xff0c;特别是在测试场景中。 它允许开发者指定要加载的配置文件或配置类的位置&#xff0c;以便在运行时或测试时能够正确地构建和初始化Spring上下文。 基本用途和工…

【开源社区】Elasticsearch(ES)中空值字段 null_value 及通过exists查找非空文档

文章目录 0、声明1、问题描述2、问题剖析2.1 NULL或者空值类型有哪些2.2 案例讲解&#xff1a;尝试检索值为 null 的字段2.3 解决思路 3、使用 null_value 的诸多坑&#xff08;避免生产事故&#xff09;3.1 null_value 替换的是索引&#xff0c;并不会直接替换源数据3.2 不支持…

LVS(Linux Virtual Server)详解

LVS&#xff08;Linux Virtual Server&#xff09;是一个用于负载均衡的开源软件项目&#xff0c;旨在通过集群技术实现高性能、高可用的服务器系统。它运行在Linux操作系统上&#xff0c;并且可以利用内核级的资源来提高性能和稳定性。 思维导图 LVS的工作原理 LVS主要基于Ne…

IDEA 2022.1.4用前需知

目录 一、配置国内源 二、正确再次创建新项目方式 IDEA 2022.1.4下载地址 一、配置国内源 1、查看本地仓库地址 2、设置国内源-添加Setting.xml文件内容 3、修改目录&#xff08;考虑到当前硬盘空间大小&#xff0c;英文目录名&#xff09; 1&#xff09;创建你要移动过去…

xCat部署及分发操作系统

一、环境准备 此次安装部署均在VMware虚拟机上运行。系统采用通用稳定的centos7系统,移植到其他(linux)系统应该问题不大。软件服务器的VMware虚拟机的创建部分就跳过了. 1.1服务器的配置 IP主机名配置备注192.168.11.10master4C/8G/60GXcat/DNS/DHCP/NTP/TFTP192.168.11.11n…

【超音速专利 CN109636858A】锂电池涂布图像采集标定方法、系统、设备及存储介质

申请号CN201811276578.4公开号&#xff08;公开&#xff09;CN109636858A申请日2018.10.30申请人&#xff08;公开&#xff09;广州超音速自动化科技股份有限公司(超音速人工智能科技股份有限公司)发明人&#xff08;公开&#xff09;赵兵锁(张); 张俊峰(张); 梁土伟 相关术语…

读零信任网络:在不可信网络中构建安全系统14流量信任

1. 流量信任 1.1. 网络流的验证和授权是零信任网络至关重要的机制 1.2. 零信任并非完全偏离已知的安全机制&#xff0c;传统的网络过滤机制在零信任网络中仍然扮演着重要的角色 2. 加密和认证 2.1. 加密和认证通常是紧密相关的&#xff0c;尽管其目的截然不同 2.1.1. 加密提…

Spring Boot - 开启log-request-details详细记录调测Controller接口

文章目录 概述实现详细日志输出1. 调整日志级别2. 示例接口3. 启用请求详细信息日志 注意事项 概述 在Spring Boot项目中&#xff0c;调试Controller接口的请求和响应信息可以极大地帮助开发人员排查问题并确保应用程序的安全性和性能。 实现详细日志输出 1. 调整日志级别 …

在LabVIEW中高效读取大型CSV文件的方法

当尝试使用“读取分隔的电子表格VI”从大型CSV文件&#xff08;数百MB&#xff09;中读取数据时&#xff0c;可能会遇到内存已满错误。这是因为该VI会一次性读取整个文件并将其转换为数值数组&#xff0c;导致占用大量内存。 解决方案 可以使用“从文本文件VI读取”来部分读取…

Acrel-1000DP分布式光伏监控系统在光伏并网系统的实际应用分析-安科瑞 蒋静

摘要&#xff1a;为实现“双碳目标”即中国明确提出的2030年“碳达峰”与2060年“碳中和”目标。推动节能减排、实现经济可持续发展&#xff0c;我国采取了一系列方案和行动。其中就包括能源绿色低碳转型行动&#xff1a;大力发展新能源&#xff0c;‌推动煤电节能降碳&#xf…

golang 条件语句中有多条件时多条件的执行顺序和执行效率问题总结 -- if else条件语句 多条件时执行顺序为从左到右

在golang的 条件语句中有多个执行条件时&#xff0c;go的执行顺序为从左到右依次执行&#xff0c; 如果多个条件是 && 条件与的关系&#xff0c;则执行条件的顺序就与程序的效率密切相关&#xff0c; if else 的多个条件示例&#xff1a; func TestOrderTest(t *testi…

监听器——监听着我们WEB项目中的域对象

监听器 ——它监听着我们WEB项目中的域对象 何时被创建被销毁 ServlertContextListener——它监听ServletContext对象的创建和销毁 contextInitialized 创建的时候会调用 Tomcat启动时调用 contextDestroyed销毁的时候自动会调用的方法 Tomcat终止 这两个方法中携带的参数S…

C# Unity 面向对象补全计划 七大原则 之 迪米特法则(Law Of Demeter )难度:☆☆☆ 总结:直取蜀汉

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识&#xff0c;看不懂没关系 请看专栏&#xff1a;http://t.csdnimg.cn/mIitr&#xff0c;查漏补缺 1.迪米特法则&#xff08;…

hue无法执行批处理作业解决方案

在执行批处理作业的时候&#xff0c;报作业为FAILED状态 查看执行的过程中发现&#xff1a;oozie的问题。 提示hdfs的/user/oozie/share/lib目录不存在&#xff0c;原因是因为没有安装oozie的共享库 解决方案&#xff1a; 点击oozie角色&#xff0c;操作中点击安装oozie共享库…

使用pycharm下载requests库时出现Error loading package list:Connect timed out

问题&#xff1a; 这个问题可能是由于网络连接不稳定导致的。您可以尝试以下方法来解决&#xff1a; 检查您的网络连接是否正常&#xff0c;尝试重新连接并重试。 检查您的防火墙设置&#xff0c;确保允许PyCharm访问Internet。 尝试更改PyCharm的HTTP代理设置&#xff0c;…

【C语言篇】字符和字符串以及内存函数详细介绍与模拟实现(下篇)

文章目录 前言字符串函数strstr的使用和模拟实现strtok函数的使用strerror函数的使用 内存函数memcpy使用和模拟实现memmove使用和模拟实现memset函数的使用memcmp函数的使用 前言 本篇接上一篇&#xff1a; 字符和字符串以及内存函数详细介绍&#xff08;上篇&#xff09; 字…

WPF参考做的TextBox圆角,并且水印文字操作

1.首先进行 转换器操作&#xff08;获取当前Textbox Text是否为空或者空格&#xff09; / // <summary>/// 非空验证转换器/// </summary>#region String IsNullOrEmptypublic class IsNullOrEmptyConverter : IValueConverter{public object Convert(object valu…

Linux云计算 |【第二阶段】NETWORK-DAY4

主要内容&#xff1a; NAT 原理与配置&#xff08;私有IP地址、静态NAT转换、Easy IP&#xff09;、VRRP解析&#xff08;主路由器、备份路由器、虚拟路由器、优先级&#xff09; 一、NAT概述 NAT 网络地址转换&#xff08;Network Address Translation&#xff09;是一种网络…

提高PDF电子书的分辨率

解决方法出处 1. 安装ImageMagick brew install imagemagick brew install ghostscript2. 按流程进行 convert -density 600 your_pdf_filename.pdf output-%02d.jpg convert output*.jpg -normalize -threshold 80% final-%02d.jpg convert final*.jpg my_new_highcontras…

MySQL | 行锁——记录锁、间隙锁 、临键锁、插入意向锁

1、InnoDB中的行锁 行锁&#xff08;Row Lock&#xff09; 也称为记录锁&#xff0c;顾名思义&#xff0c;就是锁住某一行&#xff08;某条记录row&#xff09;。需要注意的是&#xff0c;MySQL服务器层并没有实现行锁机制&#xff0c;行级锁只在存储引擎层实现。 优点&#x…