数据结构-树

参考:https://www.hello-algo.com/chapter_tree/binary_tree/#711

1. 介绍

树存储不同于数组和链表的地方在于既可以保证数据检索的速度,又可以保证数据插入删除修改的速度,二者兼顾。

二叉树是一种很重要的数据结构,是非线性的结构,
非常多其他数据结构都是基于二叉树的基础演变而来的。
如:一般二叉树、完全二叉树、满二叉树、线索二叉树、哈夫曼树、
二叉排序树、平衡二叉树、红黑树、B树。
普通的二叉树,很难构成现实的应用场景,但因其简单,常用于学习研究,
平衡二叉树则是实际应用比较多的。
常见于快速匹配、搜索等方面。
常用的树有:AVL树、红黑树、B+树、Trie(字典)树。
1、AVL树: 最早的平衡二叉树之一。应用相对其他数据结构比较少。windows对进程地址空间的管理用到了AVL树。
2、红黑树: 平衡二叉树,广泛用在C++的STL中。如map和set都是用红黑树实现的。还有Linux文件管理。
3、B/B+树: 用在磁盘文件组织 数据索引和数据库索引。
4、Trie树(字典树): 用在统计和排序大量字符串,如自动机、M数据库索引。

2 概念

2.1 二叉树的每个节点最多只能有两个子节点(左、右节点)

在这里插入图片描述

1. 「根节点 root node」:位于二叉树顶层的节点,没有父节点。
2. 「叶节点 leaf node」:没有子节点的节点,其两个指针均指向None 
3. 「边 edge」:连接两个节点的线段,即节点引用(指针)。
4. 节点所在的「层 level」:从顶至底递增,根节点所在层为 15. 节点的「度 degree」:节点的子节点的数量。在二叉树中,度的取值范围是 0、1、2 。
6. 二叉树的「高度 height」:从根节点到最远叶节点所经过的边的数量。
7. 节点的「深度 depth」:从根节点到该节点所经过的边的数量。
8. 节点的「高度 height」:从距离该节点最远的叶节点到该节点所经过的边的数量。

2.2 完全二叉树

若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。

特征:

叶子结点只可能在最下面的两层上出现,对任意结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙的最大层次必为L或L+1

图示:
在这里插入图片描述
特点:

(1)若i为奇数且i>1,那么tree[i]的左兄弟为tree[i-1];(2)若i为偶数且i<n,那么tree[i]的右兄弟为tree[i+1];(3)若i>1,tree[i]的双亲为tree[i div 2];(4)若2*i<=n,那么tree[i]的左孩子为tree[2*i];若2*i+1<=n,那么tree[i]的右孩子为tree[2*i+1];(5)若i>n/2,那么tree[i]为叶子结点(对应于(3));(6)若i<(n-1)/2,那么tree必有两个孩子(对应于(4));(7)满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树;(8)完全二叉树第i层至多有2^(i-1)个节点,共i层的完全二叉树最多有2^i-1个节点。

2.3 满二叉树

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

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

相关文章

利用mvnrepository找到jssc(或其他特定包)的jar包下载本地并导入JAVA项目

文章目录 一、mvnrepository下载jar包&#xff08;找到依赖&#xff09;第一步&#xff1a;进入mvnrepository第二步&#xff1a;搜索名称第三步&#xff1a;进入详情第四步&#xff1a;选择版本第五步&#xff1a;点击下载 二、jar包添加到项目操作流程成功标志 一、mvnreposi…

Ubuntu 1.84.2Visual Studio Code 下载配置与vscode查看内存Hex Editor插件,简单易懂

目录 前言 一 首先我为啥要重装Vs Code呢&#xff1f; 二 下载1.84.2Visual Studio Code 三 配置Vscode终端字体 四 安装插件 前言 这是一篇将老版本的VsCode下载至最新版的博文&#xff0c;从下载到调试全篇 一 首先我为啥要重装Vs Code呢&#xff1f; 因为我想安装这个…

CentOS7磁盘挂载

1 引言 本文主要讲述CentOS7磁盘挂载相关知识点和操作。 2 磁盘挂载 步骤1&#xff1a; 查看机器所挂硬盘及分区情况 fdisk -l查询结果&#xff1a; 由上图可以看到该结果包含&#xff1a;硬盘名称、硬盘大小等信息。 属性解释说明Disk /dev/vda硬盘名称53.7G磁盘大…

WPF面试题中级篇

WPF中级篇[17] 15. 描述下WPF对象完整的层次结构? Object&#xff1a;Object 是 .NET Framework 中所有类的根类。它提供了一些基本的方法和属性&#xff0c;如 Equals、GetHashCode 和 ToString。所有其他类都直接或间接地继承自 Object。Dispatcher&#xff1a;Dispatcher…

常用数据存储格式介绍:Excel、CSV、JSON、XML

在现代数字时代&#xff0c;数据经过提炼后可以推动创新、简化运营并支持决策流程。然而&#xff0c;在提取数据之后&#xff0c;并将其加载到数据库或数据仓库之前&#xff0c;需要将数据转化为可用的数据存储格式。本文将介绍开发者常用的4种数据存储格式&#xff0c;包括 Ex…

工厂模式之抽象工厂模式(常用)

抽象工厂模式 工厂方法模式中考虑的是一类产品的生产&#xff0c;如畜牧场只养动物、电视机厂只生产电视机、计算机软件学院只培养计算机软件专业的学生等。 同种类称为同等级&#xff0c;也就是说&#xff1a;工厂方法模式中只考虑生产同等级的产品&#xff0c;但是在现实生…

【Rxjava详解】(四)线程切换

lift()变换原理 这些变换虽然功能各有不同&#xff0c;但实质上都是针对事件序列的处理和再发送。而在RxJava的内部&#xff0c;它们是基于同一个基础的变换方法&#xff1a;lift()。 首先看一下lift() 的内部实现&#xff08;仅显示了部分主要逻辑代码): public <R> …

please upgrade numpy version to >=1.20

升级 upgrade numpy_升级numpy-CSDN博客 pip install numpy --upgrade 没有pip conda install numpy --upgrade 会报错 conda list numpy来查看numpy版本 似乎这个numpy要看numpy-base这个 似乎没有pip

记录ruoyi-plus-vue部署的问题

ruoyi-vue-plus5.x 后端 ruoyi-vue-plus5.x 前端 前端本地启动命令 # 克隆项目 git clone https://gitee.com/JavaLionLi/plus-ui.git# 安装依赖 npm install --registryhttps://registry.npmmirror.com# 启动服务 npm run dev# 构建生产环境 yarn build:prod # 前端访问地址…

百度文心一言(千帆大模型)聊天API使用指导

开篇不得不吐槽下百度&#xff0c;百度智能云平台首页跳转千帆大模型平台的按钮太多了&#xff0c;不同按钮跳转不同的子页面&#xff0c;不熟悉的&#xff0c;能把人找懵。入口太多&#xff0c;就导致用户不知道从何开始。本文就从一个前端开发人员的角度&#xff0c;教大家快…

AlphaPose-RKNN-rk3588

1. AlphaPose背景介绍 AlphaPose是一个用于人体姿态估计的开源工具。人体姿态估计在计算机视觉中是一个核心问题&#xff0c;它旨在定位并识别图像或视频中的人体关键点和骨骼结构。在许多应用中&#xff0c;如动作识别、行为分析、虚拟现实和增强现实&#xff0c;人体姿态估计…

视频服务网关的三大部署(二)

视频网关是软硬一体的一款产品&#xff0c;可提供多协议&#xff08;RTSP/ONVIF/GB28181/海康ISUP/EHOME/大华、海康SDK等&#xff09;的设备视频接入、采集、处理、存储和分发等服务&#xff0c; 配合视频网关云管理平台&#xff0c;可广泛应用于安防监控、智能检测、智慧园区…