数据结构的概念大合集06(树和二叉树)

news2024/9/23 19:17:46

概念大合集06

  • 1、树
    • 1.1 树的相关定义
    • 1.2 树的基本运算
    • 1.3 树的基本术语
      • 1.3.1 结点的度,树的度
      • 1.3.2 分支结点,叶子节点
      • 1.3.3 路径,路径长度
      • 1.3.4 孩子结点,双亲结点,兄弟结点
      • 1.3.5 结点层次,树的高度
      • 1.3.6 有序树,无序树
      • 1.3.7 森林
    • 1.4 树的性质
  • 2、二叉树
    • 2.1 二叉树的相关概念
      • 2.1.1 二叉树的相关定义
      • 2.1.2 二叉树的表现形式
      • 2.1.3 满二叉树
      • 2.1.4 完全二叉树
      • 2.1.5 完全二叉树与满二叉树比较
    • 2.2 二叉树的性质
    • 2.3 二叉树的构造
      • 2.3.1 先序序列
      • 2.3.2 中序序列
      • 2.3.3 后序序列
      • 2.3.4 由遍历序列构造二叉树

阅读指南:
在本文中,我们将重点探讨概念性的内容,旨在为您提供更为流畅和易于理解的阅读体验。关于树和二叉树的算法实现部分,作者已经安排在另一篇文章中进行详细阐述。
本篇文章的相关算法
数据结构大合集06——树与二叉树的相关函数运算算法

1、树

1.1 树的相关定义

树:有n个结点(元素)组成的有限集合(记为T);

空树:当n = 0时;

根结点:n > 0,这n个结点中有且仅有一个结点作为树的根节点,简称为“根”;

子树:除根节点外的m个不相交的有限集,其中每个子集本身又是一颗符合本定义的树,称为根节点的子树;

1.2 树的基本运算

函数名函数作用
InitTree(&t)初识化树,构造一个空树t
DestroyTree(&t)销毁树,释放为树t分配的内存空间
TreeHeight (t)求树t的高度
Parent(t , p)求树t中p所指节点的双亲结点
Brother(t , p)求树t中p所指节点的所有兄弟节点
Sonts(t , p)求树t中p所指节点的所有子孙节点

1.3 树的基本术语

1.3.1 结点的度,树的度

  • 结点的度:树中某个结点的子树的个数
  • 树的度:所有结点的度中最大值

1.3.2 分支结点,叶子节点

  • 分支结点:度不为0的结点非根结点
  • 叶子结点:度为0的结点
    请添加图片描述

1.3.3 路径,路径长度

  • 路径:对于树中任一两个结点ki和Kj,若速中存在一个结点序列,除kj外的任一结点都是起其在序列中的前一个结点的后继结点,则这段序列成为ki到Kj的一条路径
  • 路径长度:路径序列的结数目减1

1.3.4 孩子结点,双亲结点,兄弟结点

  • 孩子结点:每个结点的后继结点
  • 双亲结点:孩子结点的前向节点
  • 兄弟结点:具有同一双亲结点的孩子结点互称为兄弟结点
    请添加图片描述

1.3.5 结点层次,树的高度

  • 结点层次(结点深度):从根结点开始数起,即根结点为1,依次排列
  • 树的高度(树的深度):树中结点的最大层次

请添加图片描述

1.3.6 有序树,无序树

  • 有序树:树中各结点的子树是按照一定的次序从左向右排列的,且相对次序不能随意更换(一般都是有序树)
  • 无序树:与有序树相反

1.3.7 森林

  • 森林:m棵树互不相交的数的集合,好比一个根结点有多个子树,这时候把根结点删除,于是多个子树就组成了森林

1.4 树的性质

  1. 树中的结点(元素)数等于所有结点的度数之和加1。
  2. 度为m的数找那个第i层上最多有mi-1个结点( i > 0 )。

       推广:当一个m次树的第i层有mi-1个结点时,则层该层是满的,若每一层都是满的,则称该树为满m次树。

  1. 高度为h的m次树最多有 (mk - 1) / (m - 1)个结点。
  2. 具有n个结点的m次树的最小高度为logm(n * (m - 1) + 1)。

注:
具体的推到过程,读者们可以自己尝试尝试,这里就不在过多推导了。

2、二叉树

2.1 二叉树的相关概念

2.1.1 二叉树的相关定义

二叉树:一个有限的结点集合,这个结点或者为空,或者有一个根节点和两颗互不相交的称为左子树与右子树的二叉树组成。

层序编号:约定编号从树根为1开始,按照层数从小到大,同一层从左到右的次序进行。

树中所有的基本术语在二叉树里面都适用。

注:
任何m次树都可以转化为二叉树结构;

2.1.2 二叉树的表现形式

  1. 空二叉树
    请添加图片描述

  2. 单个结点的二叉树
    请添加图片描述

  3. 右子树为空的二叉树
    请添加图片描述

  4. 左子树为空的二叉树
    请添加图片描述

  5. 左右子树都不为空的二叉树
    请添加图片描述

2.1.3 满二叉树

满二叉树:所有分支结点都有左右孩子结点,并且叶子结点都集中在二叉树的最下一层

请添加图片描述

满二叉树在一些特定的数据存储和检索算法中有用,但相对较少见。

满二叉树(非空)的特点:

  • 叶子结点都在最下一层
  • 只有度为0和度为2的结点

2.1.4 完全二叉树

完全二叉树:二叉树中最多只有最下面两层的结点的度数可以小于2,并且最下面一层的叶子结点依次排列在该层的最左边的位置上

请添加图片描述

完全二叉树在堆数据结构中广泛应用,如二叉最小堆和二叉最大堆。

完全二叉树(非空)的特点:

  • 叶子节点只可能在最下面两层中出现
  • 对于最大层次中的叶子结点,都依次排列在该层最左边的位置上
  • 如果有度为1的结点,只看有一个,且该结点只有左孩子而无右孩子
  • 在按层序编号是,一旦出现编号为i的结点是叶子结点或只有左孩子,则编号大于i的结点均为叶子结点。
  • 当结点总数n为奇数时,n1 = 0;当n为偶数时, n1 = 1。

2.1.5 完全二叉树与满二叉树比较

由满二叉树与完全二叉树的表示图可以看出:

满二叉树的成立条件:
每个节点都有两个子节点(除非是叶子节点),并且所有叶子节点都在同一层级

完全二叉树的成立条件:
每一层都是满的,或者除了最后一层外其他层都是满的,且最后一层的节点尽可能地靠左排列。

当满二叉树的高度与完全二叉树相同时,满二叉树是完全二叉树的一种特殊体现,并且完全二叉树与同高度的满二叉树的对应位置结点的编号相同。

2.2 二叉树的性质

  1. 非空二叉树上的叶子结点树等于双分子结点数加1。
  2. 在二叉树的第i层上至多有2i-1个结点( i >= 1 )。
  3. 深度为h的二叉树至多有2h-1个结点( k >= 1 )。
  4. 具有n个节点的完全二叉树深为( log2(n + 1) )。

2.3 二叉树的构造

2.3.1 先序序列

沿着二叉树外沿,逆时针走一圈回到根节点,路上遇到的元素顺序,就是先序遍历的结果
请添加图片描述

先序遍历结果为:A B D E C F G

2.3.2 中序序列

中序遍历可以看成,二叉树每个节点,垂直方向投影下来(可以理解为每个节点从最左边开始垂直掉到地上),然后从左往右数,得出的结果便是中序遍历的结果

请添加图片描述

中遍历结果为:D B E A F C G

2.3.3 后序序列

后序遍历就像是剪葡萄,我们要把一串葡萄剪成一颗一颗的。

围着树的外围绕一圈,如果发现一剪刀就能剪下的葡萄(必须是一颗葡萄)(也就是葡萄要一个一个掉下来,不能一口气掉超过1个这样),就把它剪下来,组成的就是后序遍历了。

后序遍历中,根节点默认最后面

请添加图片描述

后序遍历结果:H I D J E B K F G C A

2.3.4 由遍历序列构造二叉树

请添加图片描述

本篇文章的相关算法
数据结构大合集06——树与二叉树的相关函数运算算法

上一篇文章
数据结构的概念大合集05(串)

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

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

相关文章

24.两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 …

DELL交换机清空配置S4128T

备份配置 show run | no-more show inventory | no-more show environment | no-more show system brief | no-more -------------- 清除数据 delete startup-config system "sudo -i" //输入密码 rm -rf /config/etc/opt/dell/os10/db_init/startup.xml rm…

基于SpringBoot和Vue的大学生租房系统的设计与实现

今天要和大家聊的是一款今天要和大家聊的是一款基于SpringBoot和Vue的大学生租房系统的设计与实现。 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同…

【Java11下载、安装、部署指南】

oracle jdk11下载 oracle jdk所有版本归档【archive】下载地址: https://www.oracle.com/java/technologies/downloads/archive/ oracle jdk11下载地址: https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html 配置或修改wi…

【Python + Django】启动简单的文本页面

前言: 为了应付(bushi)毕业论文,总要自己亲手搞一个像模像样的项目出来吧 ~ ~ 希望自己能在新的连载中学到项目搭建的知识,这也算是为自己的测试经历增添光彩吧!!! 希望、希望大家…

MySQL 字段定义时的属性设置

开发的时候第一步就是建表,在创建表的时候,我们需要定义表的字段,每个字段都有一些属性,比如说是否为空,是否允许有默认值,是不是逐渐等。 这些约束字段的属性,可以让字段的值更符合我们的预期&…

③【Docker】Docker部署Nginx

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ ③【Docker】Docker部署Nginx docker拉取nginx…

【计算机网络篇】物理层(3)编码与调制

文章目录 🍔编码与调试⭐基本概念 🍔基本的带通调制方法和混合调制方法⭐基本的带通调制方法⭐混合调制方法 🍔编码与调试 物理层是OSI模型中的第一层,它负责在物理媒体上传输原始比特流。在物理层的编码和调试中,我们…

基于springboot的学生心理健康评估系统

技术:springbootvuemysql 一、系统背景 这次开发的学生心理咨询评估系统有管理员和用户。管理员可以管理个人中心,用户管理,试题管理,试卷管理,考试管理等。用户参加考试。经过前面自己查阅的网络知识,加上…

数据挖掘之关联规则

“啤酒和尿布的荣誉” 概念 项 item:单个的事物个体 ,I{i1,i2…im}是所有项的集合,|I|m是项的总数项集(item set)/模式(pattern):项的集合,包含k个项的项集称为k-项集数据集(data set)/数据库…

2024年最新分享提升Macbook运行速度的十大小技巧

经常听到小伙伴在抱怨PC电脑很慢,但是其实Mac电脑随着用的时间增长,运行速度也会越来越慢,那么造成Mac运行慢的原因有很多,可能是操作系统过时未更新,也可能是内存(RAM)不足,以下小编…

计算机二级C语言的注意事项及相应真题-6-程序设计

目录 51.将a所指数组主对角线上的元素分别乘以2;次对角线上的元素分别乘以3,依次放入指针p所指的数组中。计算过程中不得修改a所指数组中的数据52.将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的十位和千位…

【OJ比赛日历】快周末了,不来一场比赛吗? #03.23-03.29 #16场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…)比赛。本账号会推送最新的比赛消息,欢迎关注! 以下信息仅供参考,以比赛官网为准 目录 2024-03-23(周六) #7场比赛2024-03-24…

SCI一区 | Matlab实现SSA-TCN-BiGRU-Attention麻雀算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现SSA-TCN-BiGRU-Attention麻雀算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现SSA-TCN-BiGRU-Attention麻雀算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型描述程序…

算法详解——Dijkstra算法

Dijkstra算法的目的是寻找单起点最短路径,其策略是贪心加非负加权队列 一、单起点最短路径问题 单起点最短路径问题:给定一个加权连通图中的特定起点,目标是找出从该起点到图中所有其他顶点的最短路径集合。需要明确的是,这里关心…

Python和Java哪一个更适合初学者?

Python和Java哪一个更适合初学者? 对于初学者来说,Python通常是更友好的入门选择。它的语法简洁明了,接近自然语言,易于理解,使得初学者能够更快地掌握编程基础和逻辑思维。Python拥有丰富的库支持,特别是在…

【Arxml专题】-29-使用Cantools将CAN Matrix Arxml自动生成C语言代码

目录 1 安装Python和Cantools 1.1 查看Python已安装的Package包 1.2 在Python中安装Cantools插件包 1.3 获取更多Cantools工具的更新动态 2 CAN Matrix Arxml自动生成C语言代码 2.1 批处理文件CAN_Matrix_Arxml_To_C.bat内容说明 2.2 CAN Matrix Arxml文件要求 2.3 如何…

关于Ansible的模块 ①

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 什么是Ansible模块 在Linux中,bash无论是在命令行上执行,还是在bash脚本中,都需要调用cd、l…

Zookeeper的ZAB协议原理详解

Zookeeper的ZAB协议原理详解 如何保证数据一致性。 Paxos, 吸收了主从。 zk 数据模型Watch机制 zab zookeeper原子广播协议。 ZAB概念 ZooKeeper是通过Zab协议来保证分布式事务的最终一致性。 Zab(ZooKeeper Atomic Broadcast,.ZooKeeper原子广播协议)支持…

C语言例:设 int a,b; 则表达式(a=2,b=5,a++,b++,a+b) 的值

代码如下&#xff1a; #include<stdio.h> int main(void) {int a,b,m; m(a2,b5,a,b,ab);printf("(a2,b5,a,b,ab) %d\n",m);//a2,b5,a3,b6,ab9return 0; } 结果如下&#xff1a;