二叉树详解-第一篇 树以及二叉树的概念

目录

​编辑

1.树的概念及结构

1.1树的概念

1.2树的特点

1.3树的相关概念

1.4树的表示

2.二叉树的概念及结构

2.1二叉树的概念

2.2特殊二叉树-满二叉树和完全二叉树

1.满二叉树的概念及性质

2.完全二叉树的概念及性质

2.3二叉树的性质(重点)

2.4二叉树的存储

1.顺序存储:

2.链式存储


1.树的概念及结构

1.1树的概念

        树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成的一个具有参差关系的集合,把它叫做树是因为看起来像一倒挂的树,根在上,叶子在下。其中有一个特殊的节点,称为根节点,根节点没有前驱结点。

如图:

1.2树的特点

        树形结构中,子树之间不能有交集,否则就不是属树形结构。

        子树是不相交的。

        除了根节点之外,每个节点有且仅有一个父节点。

        一颗N个节点的树有N-1条边。

1.3树的相关概念

加粗要重点记忆!

节点的度:一个节点的出度为该节点的度。

叶节点或终端节点:度(出度)为0的节点。

非终端节点或分支节点:度(出度)不为0的节点。

双亲结点或父节点:若该结点有子节点,则该节点为子节点的父节点。

孩子节点或子节点:根节点的孩子为孩子结点。

兄弟结点:具有相同父节点的结点互相称为兄弟节点。

树的度:一棵树中,所有节点中节点度最大的度称为树的度。

节点的层次:从根开始,根为第一层,根的子节点为第二层,......。

树的高度或深度:树中所有结点的最大层次;

堂兄弟结点:在同一层的结点,但是不同父节点的结点。

森林:n棵互不相交的树的集合为森林。

1.4树的表示

        树的表示,既要保存值,又要保存结点和结点之间的关系。树有很多种表示方法:双亲表示法。孩子表示法,孩子双亲表示法,以及孩子兄弟表示法。我这里主要讲孩子兄弟表示法(左孩子右兄弟表示法)。

已知树的度为N

struct TreeNode
{int val;struct TreeNode* num[N];
};

未知树的度

struct TreeNode
{int val;Seqlist num;//动态顺序表num中存储 struct TreeNode*
};

左孩子右兄弟表示法(重点)

struct TreeNode
{int val;struct TreeNode* leftchild;struct TreeNode* rightbrother;
};


2.二叉树的概念及结构

2.1二叉树的概念

二叉树为树的子集,度最大为二(每个节点最多有两个孩子,左孩子,右孩子),且二叉树的子树有左右之分,不能颠倒,所以二叉树为有序树。

以下都属于二叉树:

2.2特殊二叉树-满二叉树和完全二叉树

1.满二叉树的概念及性质

满二叉树:一个二叉树中,每一层的结点数都达到了最大值,则这个二叉树为吗,满二叉树。

性质:

满二叉树的节点总数为 2^{k}-1。(k为二叉树层数)。

层数为 k=\log_{2}(k+1)

叶子节点数量 2(k-1)

2.完全二叉树的概念及性质

完全二叉树:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。(前k-1层都是满的,最后一层不满,但是从左到右必须是连续的)

性质:

具有n个结点的完全二叉树的深度

满二叉树肯定是完全二叉树,而完全二叉树不一定是满二叉树。

2.3二叉树的性质(重点)

1.若规定根节点的层数为1,则一颗非空二叉树的第i层上最多有2^{i-1}个节点.

2.若规定根节点的层数为1,则深度为k的二叉树的最大结点数为2^{h}-1.

3.对任何一颗二叉树,度为0的叶节点数为n{_{0}}^{},度为2的分支节点数为n{_{2}}^{},则有n{_{0}}^{}=n{_{2}}^{}+1

2.4二叉树的存储

二叉树的存储有两种,一种是顺序存储,一种是链式存储。

1.顺序存储:

顺序存储就是使用数组来存储,非常适用于满二叉树和完全二叉树,若是其他数,则会有空间的浪费。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。

用下标计算父子关系:

假设已知父亲下标为i,则左孩子的下标为2*i+1,则右孩子的下标为2*i+2

假设孩子在数组中的下标为j,则父亲下标为(j-1)/2

因为:若为左孩子则父亲下标为(j-1)/2,若为右孩子则父亲下标为(j-2)/2,又因为(j-jishu)/2=(j-oushu)/2,则统一为(j-1)/2;

2.链式存储

用链表来表示一棵二叉树,通常方法是链表中每个节点由三个域组成,数据域和左右指针域,左右指针分别用来给出该节点左孩子和右孩子所在节点的存储地址,链式存储又分为二叉链和三叉链,我们一般学习二叉链,三叉链一般用于红黑树。

//二叉链
struct TreeNode
{int val;//值struct TreeNode* left;//左孩子struct TreeNode* right;//右孩子
};//三叉链
struct TreeNode
{int val;//值struct TreeNode* left;//左孩子struct TreeNode* right;//右孩子struct TreeNode* parent;//当前节点的双亲
};


本篇完。 

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

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

相关文章

LeetCode - #103 二叉树的锯齿形层序遍历

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新…

沉淀硬化不锈钢压缩弹簧的主要特性

沉淀硬化不锈钢,作为一种兼具高强度与耐腐蚀性的合金材料,被广泛应用于制造高性能的压缩弹簧,尤其是在苛刻环境下的应用需求。以下是对沉淀硬化不锈钢压缩弹簧主要特性的科普介绍: 良好的耐蚀性 沉淀硬化不锈钢与304不锈钢拥有相似…

做个牛奶配送小程序商城是怎样的

商家线上经营奶品,主要是成品包装品牌奶或散奶周边客源生意模式等,无论哪些模式,本身奶产品的需求度就不低,自然也有着大量客户,农场/品牌厂商/经销商/小摊贩,除了线下实体店发展外,线上要完善本…

SpringCloud断路器的使用与原理解析

Spring Cloud断路器是在分布式系统中实现容错的一种方式。它的原理是通过在调用链路上添加断路器,当某个服务的调用出现故障或超时时,断路器会自动迅速地切换到快速失败模式,防止故障扩散,从而保护整个系统的稳定性。 Spring Cloud断路器的使用与原理解析如下: 一、使用断…

数据结构经典测题3

1. 设有定义: char *p; ,以下选项中不能正确将字符串赋值给字符型指针 p 的语句是【多选】( ) A: pgetchar(); B: scanf("%s",p); C: char s[]"china"; ps; D: *p"china"; 答案为ABD A选项&…

如何优化 Selenium 和 BeautifulSoup 的集成以提高数据抓取的效率?

摘要 在互联网时代,数据的价值日益凸显。对于电商网站如京东,其商品信息、用户评价等数据对于市场分析、产品定位等具有重要意义。然而,由于这些网站通常使用 JavaScript 动态生成内容,传统的爬虫技术难以直接获取到完整数据。本…

【Unity实战】yield return null还是WaitForEndOfFrame

当在Unity中编写协程(尤其是协程套无限循环)时,常常会用到yield关键字来控制协程的执行流程避免程序假死。以下是常见做法: yield return null 当使用yield return null时,协程会在下一帧继续执行。这意味着协程将暂…

SSM超市管理系统-计算机毕业设计源码12393

目 录 摘要 Abstract 1 绪论 1.1研究的背景和意义 1.2研究内容 1.3论文结构与章节安排 2 开发技术介绍 2.1 SSM框架 2.2 MySQL数据库 3 超市管理系统系统分析 3.1 可行性分析 3.2 系统流程分析 3.2.1 数据流程 3.3.2 业务流程 3.3 系统功能分析 3.3.1 功能性…

机器学习 | 回归算法原理——最速下降法(梯度下降法)

Hi,大家好,我是半亩花海。接着上次的最小二乘法继续更新《白话机器学习的数学》这本书的学习笔记,在此分享最速下降法(梯度下降法)这一回归算法原理。本章的回归算法原理基于《基于广告费预测点击量》项目,…

使用 AntV G2 绘制折线图

本文由ScriptEcho平台提供技术支持 项目地址:传送门 使用 AntV G2 绘制折线图 应用场景介绍 AntV G2 是一款基于 Vue 的数据可视化框架,可用于创建交互式图表。本代码展示了如何使用 AntV G2 绘制折线图,以可视化时间序列数据。 代码基本…

数据结构——队列(java实现)及相应的oj题

文章目录 前言队列队列的概念队列的实现队列的链表实现实现的方法与属性内部类实现节点入队列出队列获取队头元素但不删除判空获取队列元素个数 队列的数组实现循环队列方法属性实现:构造方法向循环队列插入一个元素,成功插入则为真。从循环队列中删除一…

Axivion Suite 7.8现已发布

现已实现100%覆盖MISRA规则,并加入了高级功能来提高代码分析能力。 我们很高兴地宣布Axivion Suite 7.8发布。全新版本的Axivion Suite对编译器、配置、分析、仪表板 (WebUI)和IDE插件的架构验证和静态代码分析功能均进行了升级。 100%覆盖所有可测试的MISRA规则 …

昇思25天学习打卡营第15天|K近邻算法实现红酒聚类

这个实验是关于如何使用MindSpore框架在红酒数据集上实现K近邻(KNN)算法来进行聚类分析的。KNN是一种简单但非常有效的机器学习算法,它通过计算样本之间的距离来决定其分类KNN算法的核心思想是,一个样本的类别可以通过它与训练集中…

Pytorch使用教学1-Tensor的创建

0 导读 在我们不知道什么是深度学习计算框架时,我们可以把PyTorch看做是Python的第三方库,在PyTorch中定义了适用于深度学习的张量Tensor,以及张量的各类计算。就相当于NumPy中定义的Array和对应的科学计算方法,正是这些基本数据…

【Nacos安装】

这里写目录标题 Nacos安装jar包启动Docker单体Docker集群 Nacos相关配置日志配置 Nacos安装 jar包启动 下载jar包 在官方下载链接,根据需求选择相应的版本下载。 解压 tar -zxvf nacos-server-2.4.0.1.tar.gz或者解压到指定目录 tar -zxvf nacos-server-2.4.0…

TikTok达人合作中的消费者行为研究:精准营销新趋势

随着全球社交媒体技术的飞速发展,TikTok作为短视频领域的佼佼者,其独特的达人带货模式不仅成为驱动消费市场发展的新力量,还深刻改变了消费者的购买行为。本文Nox聚星将和大家探讨TikTok达人合作过程中消费者的行为模式和偏好变化。 一、消费…

SkyWalking入门搭建【apache-skywalking-apm-10.0.0】

Java学习文档 视频讲解 文章目录 一、准备二、服务启动2-1、Nacos启动2-2、SkyWalking服务端启动2-3、SkyWalking控制台启动2-4、自定义服务接入 SkyWalking 三、常用监控3-1、服务请求通过率3-2、服务请求拓扑图3-3、链路 四、日志配置五、性能剖析六、数据持久化6-1、MySQL持…

企业怎么才能用上大语言模型?

题图|视觉中国 以ChatGPT为起点,大语言模型(LLM)用全面的技术创新,以及在用户和产业中的应用落地,再次掀起了一个AI新浪潮。 与它的前辈们相比,大语言模型因为打通了语言这一人类沟通中介&…

关联查询(xml)

多对多:数据库中需要有中间表,在两个实体类中都加入对方的List集合,在写查询语句时写三张表

MySQL第一阶段:多表查询、事务

继续我的MySQL之旅,继续上篇的DDL、DML、DQL、以及一些约束,该到了多表查询和事务的学习总结,以及相关的案例实现,为未来的复习以及深入的理解做好知识储备。 目录 多表查询 连接查询 内连接 外连接 子查询 事务 事务简介…