数据结构:树的基本概念(二叉树,定义性质,存储结构)

目录

  • 1.树
    • 1.基本概念
      • 1.空树
      • 2.非空树
    • 2.基本术语
      • 1.结点之间的关系描述
      • 2.结点、树的属性描述
      • 3.有序树、无序树
      • 4.森林
    • 3.树的常考性质
  • 2.二叉树
    • 1.基本概念
    • 2.特殊二叉树
      • 1.满二叉树
      • 2.完全二叉树
      • 3.二叉排序树
      • 4.平衡二叉树
    • 3.常考性质
    • 4.二叉树的存储结构
      • 1.顺序存储
      • 2.链式存储

1.树

1.基本概念

树是n (n>=0)个结点的有限集合,n =0时,称为空树,这是一种特殊情况。
在任意一棵非空树中应满足:
①有且仅有一个特定的称为根的结点。
②当n>1时,其余结点可分为m (m>0)个互不相交的有限集合T1,T2…… Tm,其中每个集合本身又是一棵树,并且称为根结点的子树
③树是一种递归定义的数据结构。

1.空树

结点数为0的树。

2.非空树

①有且仅有一个根节点
②没有后继的结点称为“叶子结点”(或终端结点)
③有后继的结点称为“分支结点”(或非终端结点)
④除了根节点外,任何一个结点都有且仅有一个前驱
⑤每个结点可以有0个或多个后继。

2.基本术语

1.结点之间的关系描述

①祖先结点
②子孙结点
③双亲结点(父节点)
④孩子结点
⑤兄弟结点
⑥堂兄弟结点
⑦路径:只能从上而下
⑧路径长度:经过几条边

2.结点、树的属性描述

①结点的层次(深度):从上往下数(默认从1开始)
②结点的高度:从下往上数
③树的高度(深度):总共多少层
结点的度:有几个孩子(分支)
树的度:各结点的度的最大值

3.有序树、无序树

①有序树――逻辑上看,树中结点的各子树从左至右是有次序的,不能互换
②无序树――逻辑上看,树中结点的各子树从左至右是无次序的,可以互换

4.森林

森林是m ( m≥0)棵互不相交的树的集合。

3.树的常考性质

结点数=总度数+1

②度为m的树、m叉树的区别
树的度:各结点的度的最大值
m叉树:每个结点最多只能有m个孩子的树
在这里插入图片描述

③度为m的树第i层至多有 m i − 1 m^{i-1} mi1个结点( i≥1)
④高度为h的m叉树至多有 m h − 1 m − 1 \frac{m^h-1}{m-1} m1mh1个结点。(等比数列求和)
⑤高度为h的m叉树至少有h个结点。
高度为h、度为m的树至少有h+m-1个结点。
⑥具有n个结点的m叉树的最小高度 [ l o g m ( n ( m − 1 ) + 1 ) ] [log_m^{(n(m - 1)+ 1)}] [logm(n(m1)+1)](向上取整)

2.二叉树

1.基本概念

二叉树是n (n≥0)个结点的有限集合:
①或者为空二叉树,即n = 0。
②或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。
左子树和右子树又分别是一棵二叉树。
特点:①每个结点至多只有两棵子树②左右子树不能颠倒(二叉树是有序树)

2.特殊二叉树

1.满二叉树

一棵高度为h,且含有 2 h − 1 2^h-1 2h1个结点的二叉树
在这里插入图片描述

特点:
①只有最后一层有叶子结点
不存在度为1的结点
③按层序从1开始编号,结点i的左孩子为2i,右孩子为2i+1;
结点i的父节点为[i/2] (向下取整)

2.完全二叉树

当且仅当其每个结点都与高度为h的满二叉树中编号为1~n的结点一一对应时,称为完全二叉树。

特点:
①只有最后两层可能有叶子结点
最多只有一个度为1的结点
③按层序从1开始编号,结点i的左孩子为2i,右孩子为2i+1;
④i≤ [n/2]为分支结点,i>[n/2]为叶子结点(向下取整)

3.二叉排序树

一棵二叉树或者是空二叉树,或者是具有如下性质的二叉树:
左子树上所有结点的关键字均小于根结点的关键字;
右子树上所有结点的关键字均大于根结点的关键字。
左子树和右子树又各是一棵二叉排序树。(左小右大)
在这里插入图片描述

二叉排序树可用于元素的排序、搜索

4.平衡二叉树

树上任一结点的左子树和右子树的深度之差不超过1
平衡二叉树能有更高的搜索效率。
在这里插入图片描述

3.常考性质

①:设非空二叉树中度为0、1和2的结点个数分别为n0,n1,和n2,则n0= n2+ 1。(叶子结点比二分支结点多一个)
树的结点数=总度数+1
②二叉树第i层至多有 2 i − 1 2^{i-1} 2i1个结点( i≥1)
③高度为h的二叉树至多有 2 h — 1 2^h —1 2h—1个结点(满二叉树)
④具有n个(n >0)结点的完全二叉树的高度h [ l o g 2 ( n + 1 ) ] ( 向上取整 ) 或 [ l o g 2 n ] + 1 (向下取整) [log_2^{(n + 1)}](向上取整)或[log_2^n]+ 1(向下取整) [log2(n+1)](向上取整)[log2n]+1(向下取整)
⑤若完全二叉树有2k个(偶数)个结点,则必有n1=1,n0 = k, n2 = k-1
若完全二叉树有2k-1个(奇数)个结点,则必有n1=0,n0 = k, n2 = k-1.

4.二叉树的存储结构

1.顺序存储

二叉树的顺序存储中,一定要把二叉树的结点编号与完全二叉树对应起来
利用完全二叉树,父节点与孩子结点的关系,存放在指定数组下标。
在这里插入图片描述

最坏情况:高度为h 且只有h个结点的单支树(所有结点只有右孩子),也至少需要 2 h − 1 2^h-1 2h1个存储单元。
结论:二叉树的顺序存储结构,只适合存储完全二叉树。

2.链式存储

n个结点的二叉链表共有n+1个空链域。

在这里插入图片描述

使用三叉链表――方便找父结点。

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

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

相关文章

PyTorch技术和深度学习——三、深度学习快速入门

文章目录 1.线性回归1)介绍2)加载自由泳冠军数据集3)从0开始实现线性回归模型4)使用自动求导训练线性回归模型5)使用优化器训练线性回归模型 2.使用torch.nn模块构建线性回归模型1)使用torch.nn.Linear训练…

文件改名:避免繁琐操作,利用筛选文件批量重命名技巧优化文件管理

在我们的日常生活和工作中,我们经常需要处理大量的文件,从文档、图片到音频和视频等。在这些情况下,一个高效的文件管理策略至关重要。文件重命名的必要性主要体现在两个方面。首先,对于大量文件,手动进行重命名不仅费…

邻接矩阵储存图实现深度优先遍历(C++)

目录 基本要求: 图的结构体: 图的构造: 图的深度优先(DFS): 图的打印输出: 完整代码: 测试数据: 运行结果: 通过给出的图的顶点和边的信息&#xff0c…

Sprint Boot 学习路线 4

微服务 Spring Microservices是一个框架,它使用Spring框架更容易地构建和管理基于微服务的应用程序。微服务是一种架构风格,其中一个大型应用程序被构建为一组小型、独立可部署的服务。每个服务具有明确定义的职责,并通过API与其他服务通信。…

S7-1200PLC和SMART PLC开放式以太网通信(UDP双向通信)

S7-1200PLC的以太网通信UDP通信相关介绍还可以参考下面文章链接: 博途PLC开放式以太网通信TRCV_C指令应用编程(运动传感器UDP通信)-CSDN博客文章浏览阅读2.8k次。博途PLC开放式以太网通信TSENG_C指令应用,请参看下面的文章链接:博途PLC 1200/1500PLC开放式以太网通信TSEND_…

Flink之Table API SQL连接器

连接器 Table API & SQL连接器1.概述2.支持连接器 DataGen连接器1.概述2.SQL客户端执行3.Table API执行 FileSystem连接器1.创建FileSystem映射表2.创建source数据源表3.写入数据4.解决异常5.查询fileTable6.查看HDFS Kafka连接器1.添加kafka连接器依赖2.重启yarn-session、…

vue.cli 中怎样使用自定义的组件

目录 创建自定义组件 注册并使用自定义组件 全局注册自定义组件 使用 Props 传递数据 总结 前言 在Vue CLI中使用自定义组件是构建交互式和模块化Web应用的重要一环。Vue CLI为开发者提供了使用自定义组件的灵活性和简便性。通过Vue CLI,你可以创建、注册和使…

【算法练习Day45】最长公共子序列不相交的线最大子数组和

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 最长公共子序列不相交的线最…

开发者眼中的向量数据库应用领域

目录 引言向量数据库概念向量数据库优势应用领域亚马逊云科技向量数据库向量数据库的使用步骤最后 引言 随着人工智能和大数据技术的快速发展,越来越多的技术倾向于数据存储方面,数据库领域也随着人工智能和大数据的发展而发展,尤其是向量…

月销破30万辆后,比亚迪整了波大的

最近乘联会公布了 2023 年 10 月新能源乘用车厂商销量榜单。 其中最为亮眼犹如鹤立鸡群的榜首,没错依然是我们熟悉的那个迪子! 单月销量超 30 万辆,相较去年同期暴涨 38.4%,创下了比亚迪有史以来新高。 同时也成为了国内首个月销…

PEFT概述:最先进的参数高效微调技术

了解参数高效微调技术,如LoRA,如何利用有限的计算资源对大型语言模型进行高效适应。 PEFT概述:最先进的参数高效微调技术 什么是PEFT什么是LoRA用例使用PEFT训练LLMs入门PEFT配置4位量化封装基础Transformer模型保存模型加载模型推理 结论 什…

Java学习 9.Java-数组 讲解及习题

一、数组的定义与使用 1.数组的基本概念 1.1 为什么要使用数组 数组是最简单的一种数据结构 组织一组相同类型数据的集合 数据结构本身是来描述和组织数据的 数据加结构 1.2.1 数组的创建 代码实现 new int 可省略; char[] chars{a,b,c};//定义一个整形类型数…

在线免费语音克隆工具,1分钟,复制你的声音

hi,同学们,我是赤辰。玩自媒体这么多年,总结出凡是用自己的声音做短视频,既有识别度,也更容易上热门,但是录制音频的艰难,试过的都知道,市面上也有很多克隆工具,但是基本…

【Git】Git分支与标签掌握这些技巧让你成为合格的码农

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Git》。🎯🎯 &#x1f449…

Qt——连接mysql增删查改(仓库管理极简版)

目录 UI布局设计 .pro文件 mainwindow.h main.cpp UI布局设计 .pro文件 QT core gui QT core gui sql QT sqlgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any …

【算法-链表4】环形链表2的两种解法

今天,带来链表相关算法的讲解。文中不足错漏之处望请斧正! 理论基础点这里 环形链表 1. 思路 利用链表相交 我们在环内任意一处断开,然后判断断开处的下一个位置和head是否相交,如果相交,相交处就是环口。 公式法 …

ArcGIS10.8 连接 PostgreSQL 及遇到的两个问题

前提 以前同事用过我的电脑连PostgreSQL,失败了。当时不知道原因,只能使用GeoServer来发布数据了。现在终于搞明白了,原因是ArcGIS10.2版本太老,无法连接PostgreSQL9.4。参考这里 为了适应时代的发展,那我就用新的Ar…

Spark的转换算子和操作算子

1 Transformation转换算子 1.1 Value类型 1)创建包名:com.shangjack.value 1.1.1 map()映射 参数f是一个函数可以写作匿名子类,它可以接收一个参数。当某个RDD执行map方法时,会遍历该RDD中的每一个数据项,并依次应用f函…

python Flask框架,调用MobileNetV2图像分类模型,实现前端上传图像分类

python Flask框架,调用MobileNetV2图像分类模型,实现前端上传图像分类 今天博主介绍一个图像分类的小项目 基于flask 和mobileNetV2模型的前端图像分类项目 环境配置如下: python版本3.7.6 安装库的版本如下: tensorflow 2.11.…

LabVIEW中NIGPIB设备与驱动程序不相关的MAX报错

LabVIEW中NIGPIB设备与驱动程序不相关的MAX报错 当插入GPIB-USB设备时,看到了NI MAX中列出该设备,但却显示了黄色警告指示,并且指出Windows没有与您的设备相关的驱动程序。 解决方案 需要安装能兼容的NI-488.2驱动程序。 通过交叉参考以下有…