让二叉树无处可逃

志不立,天下无可成之事。 ——王阳明


二叉树

  • 1、树?什么是树
    • 1、1、基本概念
    • 1、2、树的相关概念
    • 1、3、树的表示方式
    • 1、4、树的实际运用
  • 2、二叉树?只有两个分支吗?
    • 2、1、基本概念
    • 2、2、二叉树的相关定义
    • 2、3、二叉树的相关性质
    • 2、4、二叉树的表示方式
  • 3、总结

1、树?什么是树

1、1、基本概念

树也是属于一种数据结构,它是一种非线性的数据结构,与栈,队列和链表是不同的存在。
由n(n>=0)个有限的结点组成的具有层次关系的集合。至于为什么是树呢?其实按照结构图来看,把一颗二叉树的结构图倒过来就像一颗树了。在这里插入图片描述

在这里插入图片描述
也就是像这样。
1、树都会有一个特殊的结点,称为根节点,根节点没有父节点
2、除去根节点之后,其余的结点被分为M(M>0)个互不相交的集合T1,T2,Tm,其中每一个集合又是一棵结构类似的子树。
3、因此,树是递归定义的。(在后面的关于树之类的问题上,递归的解决方法占很大一部分)

注意:根据观察,其实真正的树,根和根之间不会相互交错。那计算机的树其实也是,子树也是不能有交集的,否则将不会是树的结构。在这里插入图片描述

1、2、树的相关概念

在这里插入图片描述

:一个节点的子树的个数。(例如A的度就是6)
叶节点或终端节点:度为0的节点称为叶子节点(就例如B,C,等等)
分支节点或非终端节点:度不为0的节点(例如 D,E,J等)
双亲结点或父节点:若一个结点有子节点,则这个结点称为其子节点的父节点:(例如A是B的父节点)
孩子结点或子节点:一个节点含有子树的根结点称为该子节点的父节点:(例如B是A的孩子节点)
兄弟节点:具有相同父节点的节点互称为兄弟节点;(B、C是兄弟节点)
树的度:一棵树中,最大的节点的度称为树的度;(树的度为6)
节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
树的高度或深度:树中节点的最大层次; (例如这棵树的高度为4)
堂兄弟节点:双亲在同一层的节点互为堂兄弟;(H、I互为兄弟节点)
节点的祖先:从根到该节点所经分支上的所有节点;(A是所有节点的祖先)
子孙:以某节点为根的子树中任一节点都称为该节点的子孙。(所有节点都是A的子孙)
森林:由m(m>0)棵互不相交的树的集合称为森林;

1、3、树的表示方式

相对于线性表的表示,由于树的不确定的性质,树的存储表示会相对比较麻烦,不只是需要保存树中的数值,还要保证节点和节点之间的关系。由于树的复杂性,所以树的表示方法也会出现多元化,就比如:双亲表示法,孩子表示法,孩子双亲表示法以及孩子兄弟表示法等。在这里不方便多说,就简单的介绍几种常用的方法孩子兄弟表示法(也是一个很妙的表示方法)

typedef int DataType;
struct Node
{
 struct Node* _firstChild1; // 第一个孩子结点
 struct Node* _pNextBrother; // 指向其下一个兄弟结点
 DataType _data; // 结点中的数据域
};

在这里插入图片描述
这就是通过孩子找兄弟,让父节点只指向一个节点,而处于同一层的都通过,带头的兄弟来找到。

下面的这个就是我简单的写一下其余的表示方法,因为相对于其余的方法,我对于孩子兄弟法还是更喜欢一点的。
在这里插入图片描述
这里的我想到的问题,在这篇文章有详细的讲解,关于指针的,如果不熟悉,可以再看一下

1、4、树的实际运用

在这里插入图片描述

2、二叉树?只有两个分支吗?

2、1、基本概念

二叉树也是一棵节点的有限集合
1、可能为空
2、由根节点加上两棵左子树和右子树的二叉树构成。在这里插入图片描述
1、二叉树不存在度大于2的节点
2、二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序的树

二叉树也可以通过递归的方式来组成,二叉树也只能分为这几种情况在这里插入图片描述

2、2、二叉树的相关定义

特殊的二叉树
==1、满二叉树:==一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k)-1,则它就是满二叉树。
==2、完全二叉树:==完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树

2、3、二叉树的相关性质

二叉树很类似与我们高中学习的生物中的关于细胞分裂的公式。(下面的公式都是相当于根节点的层数是1的情况下)
1、一棵非空的二叉树的第i层上的节点个数最多有2^(k-1)个节点。
2、深度为h的二叉树最大节点数为2^h-1。
3、如果度为 0 的节点个数为 n0 ,度为 2 的节点个数为 n2 ,那么则有n0=n2+1
4、一个有n个节点的满二叉树,那么它的深度为log(n+1),log是以2为底
(ps:明天出一个关于树相关的问题集合,感兴趣的记得关注!)

2、4、二叉树的表示方式

看过树的介绍,不难发现,二叉树相对与树的结构多样,规则变化,二叉树相对简单,所以对于二叉树的存储方式来说也是更简单一点
1、顺序存储
顺序结构就是用数组来存储,一般来说,数组的使用**只适合表示完全二叉树,**对于不是完全二叉树时会有空间的浪费。二叉树顺序存储在物理结构上是数组,但是逻辑结构上是一棵二叉树。
正常来说,这种的数组结构都是大部分存储 堆
在这里插入图片描述
2、链式存储
用链表来表示一棵二叉树
在这里插入图片描述
在这里插入图片描述
转换成代码的形式,也就是相当于这样

typedef int BTDataType;
// 二叉链
struct BinaryTreeNode
{
 struct BinTreeNode* _pLeft; // 指向当前节点左孩子
 struct BinTreeNode* _pRight; // 指向当前节点右孩子
 BTDataType _data; // 当前节点值域
}
// 三叉链
struct BinaryTreeNode
{
 struct BinTreeNode* _pParent; // 指向当前节点的双亲
 struct BinTreeNode* _pLeft; // 指向当前节点左孩子
 struct BinTreeNode* _pRight; // 指向当前节点右孩子
 BTDataType _data; // 当前节点值域
};

3、总结

对于二叉树其实本质上的基础就只有那么多,下面会推出二叉树的衍生的结构,堆。对于二叉树的问题和操作都会在之后推出,敬请期待。

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

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

相关文章

Dockerfile-xxxx

1、Dockerfile-server FROM openjdk:8-jdk-alpine WORKDIR /app COPY . . CMD java -Xms1536M -Xmx1536M -XX:UseG1GC -jar -Dlog4j2.formatMsgNoLookupstrue -Dloader.pathresources,lib -Duser.timezoneGMT-05 /app/server-main-1.0.0.jar 2、Dockerfile-bgd #FROM openjdk…

一站式社交媒体管理:揭秘HubSpot的全面解决方案

在当今数字化时代,社交媒体已经成为企业推广和品牌塑造的关键渠道。而HubSpot作为一站式市场营销平台,不仅致力于协助企业实现综合市场目标,更在社交媒体管理领域提供了全面解决方案。今天运营坛将深入探讨HubSpot如何成为一站式社交媒体管理…

DAY08_SpringBoot—整合Mybatis-Plus

目录 1 MybatisPlus1.1 MP介绍1.2 MP的特点1.3 MybatisPlus入门案例1.3.1 导入jar包1.3.2 编辑POJO对象1.3.3 编辑Mapper接口1.3.4 编译YML配置文件1.3.5 编辑测试案例 1.4 MP核心原理1.4.1 需求1.4.2 原理说明1.4.3 对象转化Sql原理 1.5 MP常规操作1.5.1 添加日志打印1.5.2 测…

哪个牌子的洗地机质量好?值得入手的洗地机

在家庭清洁方面,洗地机绝不是被认为的智商税。实际上,洗地机是一种非常实用的清洁工具,其最大的优点在于能够高效地协助我们清理家居环境,不论是在何种场景下,都能有效提升卫生水平。然而,由于市场上存在众…

seata1.8 + nacos,store.mode=db

吐槽一下,官方文档是真少,而且更新很不及时。。 官网地址:直接部署 | Apache Seata 上述地址也包含了下载链接,我用的1.8版本,挑一些关键配置说一下 1、服务器上,seata/conf/application.yml,将…

【数据结构】从顺序表到ArrayList类

文章目录 1.线性表1.1线性表的概念2.顺序表2.1顺序表的概念2.2顺序表的实现2.3接口的实现(对数组增删查改操作)3.ArrayList简介4. ArrayList使用 4.1ArrayList的构造4.2 ArrayList的方法4.3 ArrayList的遍历 1.线性表 1.1线性表的概念 线性表(linear list&#xf…

HCIP-10

交换机的作用: 区别集线器(HUB),HUB为物理层设备,只能直接转发发电流; 交换机为数据链路层设备,可以将电流与二进制转换,实现了以下功能: 无限的传输距离彻底解决了冲突…

条件概率、全概率和贝叶斯公式

目录 1. 条件概率 1.1 条件概率说明 1.2 举例说明 1.3 条件概率公式 2. 全概率公式 2.1 条件概率公式 2.2 一个特例公式 2.3 全概率公式的意义 3. 贝叶斯公式 3.1 贝叶斯公式的推导 3.2 贝叶斯公式一个特例 ​​​​​​​3.3 贝叶斯公式的意义 4. 先验概率 &…

6.1 实现微服务:匹配系统(上中下)

WebSocketConfig。ja(onOpen建立连接时自动调用onClose关闭链接时自动调用(user还存在就在线程移除)onMessageServer从Client接收消息时触发) status:match来切换界面是不是匹配还是比赛的 解析token,如果…

Elastic Observability 8.12:AI 助手、SLO 和移动 APM 支持的正式发布

作者:来自 Elastic Tom Grabowski, Akhilesh Pokhariyal Elastic Observability 8.12 宣布 AI Assistant 全面上市 (正式发布)、服务级别目标 (SLO) 和移动 APM 支持: 服务级别目标 (service level objective - SLO):现在正式发布版允许 SRE…

python:socket基础操作(2)-《udp发送信息》

基础发送udp信息 1.导入socket模块 2.使用udp模块 3.发送内容 4.关闭套接字 很简单的4步就可以实现udp的消息发送 import socket # 导入模块udp_socket socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 使用ipv4 udp协议udp_socket.sendto(b"hello world",(&…

即插即用篇 | UniRepLKNet:用于音频、视频、点云、时间序列和图像识别的通用感知大卷积神经网络 | DRepConv

大卷积神经网络(ConvNets)近来受到了广泛研究关注,但存在两个未解决且需要进一步研究的关键问题。1)现有大卷积神经网络的架构主要遵循传统ConvNets或变压器的设计原则,而针对大卷积神经网络的架构设计仍未得到解决。2)随着变压器在多个领域的主导地位,有待研究ConvNets…

精品基于Uniapp+springboot智慧校园管理系统App课程选课成绩

《[含文档PPT源码等]精品基于Uniappspringboot智慧校园管理系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: 开发语言:Java 后台框架:springboot、ssm …

ffmpeg使用及java操作

1.文档 官网: FFmpeg 官方使用文档: ffmpeg Documentation 中文简介: https://www.cnblogs.com/leisure_chn/p/10297002.html 函数及时间: ffmpeg日记1011-过滤器-语法高阶,逻辑,函数使用_ffmpeg gte(t,2)-CSDN博客 java集成ffmpeg: SpringBoot集成f…

【网络安全】-基本工具msf

secure 1、有此漏洞的目标主机2、无此漏洞的目标主机(常用) ps.本着兴趣爱好,加强电脑的安全防护能力,并严格遵守法律和道德规范。msf(metasploit framework)是一个开源的渗透测试框架,用于开发…

“智汇语言·驭领未来”——系列特辑:LLM大模型信息获取与企业应用变革

“智汇语言驭领未来”——系列特辑:LLM大模型信息获取与企业应用变革 原创 认真的飞速小软 飞速创软 2024-01-16 09:30 发表于新加坡 本期引言 LLM(Large Language Model)大型语言模型以其自然语言理解和生成能力,正以前所未有的…

函数极限与连续复盘

文章目录 函数的概念与特性反函数复合函数重要函数图像三个重要结论隐函数函数的四种特性有界性单调性奇偶性定义判断式复合函数的奇偶性:两个要记住的函数奇偶性:导数的奇偶性性质:一种特殊的形式 周期性重要结论 函数的图像基本初等函数与初等函数有趣的特性: 函数极限的概念…

Linux用户和权限

目录 1 root用户 1.1 root用户(超级管理员) ​​​​1.2 用户切换目录 1.3 sudo命令 2 用户、用户组管理 2.1 用户、用户组的概念 2.2 用户、用户组管理的相关命令 3 查看权限控制 4 修改权限控制 -chmod 5 修改权限控制 -chown 1 root用户 …

五分钟搞懂 POM 设计模式

今天,我们来聊聊 Web UI 自动化测试中的 POM 设计模式。 为什么要用 POM 设计模式 前期,我们学会了使用 PythonSelenium 编写 Web UI 自动化测试线性脚本 线性脚本(以快递 100 网站登录举栗): PYTHON 1 2 3 4 5 6 …

MapReduce概述

文章目录 1. 分布式系统的驱动力和挑战2. 分布式系统的抽象和实现工具3. 可扩展性、可用性、一致性4. MapReduce基本工作方式5. Map函数和Reduce函数 1. 分布式系统的驱动力和挑战 分布式系统的核心是通过网络来协调,共同完成一致任务的一些计算机。构建分布式系统…