数据结构-几种Tree
1.二叉查找树 或 二叉排序树 (BST)
性质:左子树的键值小于根的键值,右子树的键值大于根的键值。
2.平衡二叉树(AVL Tree)
它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
在AVL树中增删节点会导致AVL树失去平衡,有四种情况:LL,LR,RL,RR
根节点X1(L或R)孩子节点的X2(L或R)孩子节点 含有非空节点导致二叉树失去平衡
解决方法:
LL(插入到左孩子的左子树中):右旋
LR(插入到左孩子的右子树中):先围绕根节点的左孩子节点左旋,再围绕根节点右旋
RR(插入到右孩子的左子树中):左旋
RL(插入到右孩子的右子树中):先围绕根节点的右孩子节点右旋,再围绕根节点左旋
3.红黑树
一种自平衡的二叉查找树
1)节点是红色或黑色。
2)根节点是黑色。
3)每个叶子节点都是黑色的空节点(NIL节点)。
4)每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
5)从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
保证了红黑树的自平衡,红黑树从根节点到叶子节点的最长路径不会超过最短路径的2倍
在插入或删除时需要通过变色或旋转来调整(情况较为复杂)
4.平衡多路查找树(B-Tree , Balance Tree)
B-Tree是为磁盘等外存储设备设计的一种平衡查找树,减少访问磁盘I/O的次数
主要应用于文件系统以及部分数据库索引,如:非关系数据库MangoDB
m阶B-Tree特征:(k∈[m/2,m])
1)根节点至少有2个子节点
2)k个子树 , 节点元素数 k-1
3)所有叶子结点位于同一层(满树)
4)每个节点中的元素从小到大排列
5.B+Tree
大部分关系型数据库使用B+树作为索引,如MySQL
B+Tree是在B-Tree基础上的一种优化,使其更适合实现外存储索引结构
m阶B-Tree特征:(k∈[m/2,m])
1)k个子树,节点元素数为 k,
2)每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,
且叶子结点本身依关键字的大小自小而大顺序链接。
3)所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素
数据结构-几种Tree的更多相关文章
- Python入门篇-数据结构树(tree)的遍历
Python入门篇-数据结构树(tree)的遍历 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.遍历 迭代所有元素一遍. 二.树的遍历 对树中所有元素不重复地访问一遍,也称作扫 ...
- Python入门篇-数据结构树(tree)篇
Python入门篇-数据结构树(tree)篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.树概述 1>.树的概念 非线性结构,每个元素可以有多个前躯和后继 树是n(n& ...
- 【数据结构】K-D Tree
K-D Tree 这东西是我入坑 ICPC 不久就听说过的数据结构,但是一直没去学 QAQ,终于在昨天去学了它.还是挺好理解的,而且也有用武之地. 目录 简介 建树过程 性质 操作 例题 简介 K-D ...
- 「数据结构」Link-Cut Tree(LCT)
#1.0 简述 #1.1 动态树问题 维护一个森林,支持删除某条边,加入某条边,并保证加边.删边之后仍然是森林.我们需要维护这个森林的一些信息. 一般的操作有两点连通性,两点路径权值和等等. #1.2 ...
- Redis 的几种数据结构&五种数据类型对象
先看几种数据结构 通过分析底层的数据结构,学习如何根据场景选型和设计 1,简单动态字符串 redis使用的字符串SDS有别于C语言中的字符串 a, 结构 free字段为已分配但未使用的空间 len为已 ...
- 数据结构(二) 树Tree
五.树 树的定义 树的逻辑表示:树形表示法.文氏图表示法.凹入表示法.括号表示法. 结点:表示树中的元素,包括数据项及若干指向其子树的分支. 结点的度:结点拥有的子树树:树的度:一 ...
- Python与数据结构[3] -> 树/Tree[2] -> AVL 平衡树和树旋转的 Python 实现
AVL 平衡树和树旋转 目录 AVL平衡二叉树 树旋转 代码实现 1 AVL平衡二叉树 AVL(Adelson-Velskii & Landis)树是一种带有平衡条件的二叉树,一棵AVL树其实 ...
- Python与数据结构[3] -> 树/Tree[1] -> 表达式树和查找树的 Python 实现
表达式树和查找树的 Python 实现 目录 二叉表达式树 二叉查找树 1 二叉表达式树 表达式树是二叉树的一种应用,其树叶是常数或变量,而节点为操作符,构建表达式树的过程与后缀表达式的计算类似,只不 ...
- Python与数据结构[3] -> 树/Tree[0] -> 二叉树及遍历二叉树的 Python 实现
二叉树 / Binary Tree 二叉树是树结构的一种,但二叉树的每一个节点都最多只能有两个子节点. Binary Tree: 00 |_____ | | 00 00 |__ |__ | | | | ...
随机推荐
- Linux下Apache服务的部署和配置
目录 Apache服务的安装 yum源安装: 目录文件 源码包安装: 目录文件: Apache中添加对php的支持 Apache中添加php对mysql数据库的支持 Apache服务的高级配置 1:配 ...
- 重新封装了一下NODE-MONGO 使其成为一个独立的服务.可以直接通过get/post来操作
# 重新封装了一下NODE-MONGO 使其成为一个独立的服务.可以直接通过get/post来操作 # consts.js 配置用的数据,用于全局参数配置 # log.js 自己写的一个简单的存储本地 ...
- TCP的握手和挥手
三次握手 三次握手具体过程是什么? 客户端发送一个数据包 将SYN置成1,表示希望建立连接 这个包中的序列号是X 服务器收到客户端发来的数据包 通过SYN得知这是一个建立连接的请求 于是发送一个响应包 ...
- json的解析和生成
相比于xml,json的主要特点是数据小,解析速度快,但是描述性差. java中常见的json解析方法有Gson.Jackson.JSON.simple. 从解析速度上来看,Gson适合解析小数据量, ...
- Thinking in UML 笔记(一) -- 面向对象
一.UML 中最重要的就是面向对象. 面向对象的认识论可以构建更为复杂的系统来解释复杂的世界. 1. 面向过程,一切都是相互紧密地联系在一起,互相作用,互相影响. 2.面向对象, 世界是分割开的,只有 ...
- IDEA 新建 Java 项目 (图文讲解, 良心教程)
IDEA 新建 Java 项目 (图文讲解, 良心教程) 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章, 关注回复「资源」, 免费领取全网最热的Java架构师学习PDF, 转载 ...
- 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业
初窥软件工程 2020BUAA软件工程\(\cdot\)个人博客作业 目录 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业 一.作业要求简介 二.正文 (一) 快速看完整部教材,列出 ...
- 2.HTML案例二 头条页面
4 HTML案例-头条页面 4.1 案例效果 4.2 案例分析 4.2.1 div布局的进阶 想要将div布局成案例效果,首先需要对多个div进行区分,再分别设置每一个div自身的效果. 1)div的 ...
- 痞子衡嵌入式:串行NOR Flash的Continuous read模式下软复位后i.MXRT无法启动问题解决方案之RESET#
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT上使能NOR Flash的Continuous read模式在软复位后无法正常启动问题的解决经验. 前一篇文章 <在i ...
- [DB] ElasticSearch
安装 root用户解压,修改配置文件 创建新用户es 修改文件权限:chown -R es:es /kkb/install/elasticsearch-6.7.0/ 用es用户启动ElasticSea ...