当前位置: 首页 > news >正文

java学习之数据结构:四、树

主要对各种树进行介绍

目录

1.二叉树

1.1满二叉树

1.2完全二叉树

1.3有序二叉树

1.4平衡二叉树

1)LL型

2)LR型

3)RR型

4)RL型

2.B树

2.1B树与平衡二叉树区别

2.2B树条件

2.3B树添加过程

3.红黑树

3.1定义

3.2性质

4.哈夫曼树

4.1一些定义

4.2构建过程


1.二叉树

定义:二叉树是一种非线性数据结构,代表“祖先”与“后代”之间的派生关系,体现了“一分为二”的分治逻辑。与链表类似,二叉树的基本单元是节点,每个节点包含值、左子节点引用和右子节点引用。每个节点都有两个引用(指针),分别指向左子节点右子节点,该节点被称为这两个子节点的父节点。当给定一个二叉树节点时,将该节点的左子节点及其以下节点形成的树称为该节点的左子树在二叉树中,除叶子节点外,其他所有节点都包含子节点和非空子树

二叉树一般可以使用两种结构存储,一种顺序结构,一种链式结构。

1.1满二叉树

定义:是一颗每层节点数都达到其最大值的二叉树。如果一棵 二叉树的层数为 K ,且结点总数是2^k-1 ,则它就是满二叉树 。

1.2完全二叉树

定义:是由满二叉树引申过来的,对于深度为 K 的,有 n个结点的二叉树,当且仅当其每一个结点都与深度为K 的满二叉树中编号从 0 至 n-1 的结点一一对应时称之为完 全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。

简单说,就是最底层节点尽量靠左填充。

1.3有序二叉树

定义:对于任意节点,其左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值都大于该节点的值。

1.4平衡二叉树

定义:任意节点的左子树和右子树的高度之差的绝对值不超过1

操作:在插入节点时,为了保证是平衡二叉树,需要进行以下操作:

1)LL型

如下图所示,以不平衡节点为基础进行右旋。中间节点最后成为父节点

2)LR型

如下图所示,绿色节点为基础,先左旋再右旋。最后造成不平衡节点成为父节点

3)RR型

如图所示,类似LL,将红色节点右旋,最后中间节点作为父节点

4)RL型

如下图所示,将破坏节点作为旋转节点,先右旋再左旋。最后破坏节点为父节点。

2.B树

2.1B树与平衡二叉树区别

B 树就是平衡多路(即不止两个子树)查找树,它和平衡二叉树的不同有这么几点:

  1. 平衡二叉树节点最多有两个子树,而 B 树每个节点可以有多个子树,M 阶 B 树表示该树每个节点最多有 M 个子树
  2. 平衡二叉树每个节点只有一个数据和两个指向孩子的指针,而 B 树每个中间节点有 k-1 个关键字(可以理解为数据)和 k 个子树( **k 介于阶数 M 和 M/2 之间,M/2 向上取整)
  3. B 树的所有叶子节点都在同一层,并且叶子节点只有关键字,指向孩子的指针为 null

和平衡二叉树相同的点在于:B 树的节点数据大小也是按照左小右大,子树与节点的大小比较决定了子树指针所处位置。

下图对比:

2.2B树条件

  1. 若根结点不是终端结点,则至少有2棵子树
  2. 除根节点以外的所有非叶结点至少有 M/2 棵子树,至多有 M 个子树(关键字数为子树减一)
  3. 所有的叶子结点都位于同一层

2.3B树添加过程

以下图为例,构建一颗s阶B树。值得注意的是,每次“挤上去”的节点不同,所以构建出来的B树也有所不同。

1)首先确定B树的阶数---3阶,即分支中最大节点数不能超过3

2)添加元素并排序,此时节点数超过三,则将40挤上去,如下图

3)继续构建,添加元素,再次出现4节点时挤上去:

4)继续上述操作

5)继续构建,构建完成

3.红黑树

3.1定义

红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构。 红黑树是一种平衡二叉查找树的变体,它的左右子树高差有可能大于 1,所以红黑树不是严格意义上的平衡二叉树(AVL),但 对之进行平衡的代价较低, 其平均统计性能要强于 AVL 。

3.2性质

性质1. 结点是红色或黑色。

性质2. 根结点是黑色。

性质3. 所有叶子都是黑色。(叶子是NULL结点)

性质4. 每个红色结点的两个子结点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色结点)

性质5. 从任一节结点到每个叶子的所有路径都包含相同数目的黑色结点

所以可以推断出:从根到叶子的最长的可能路径不多于最短的可能路径的两倍长

4.哈夫曼树

4.1一些定义

路径:在一棵树中,一个结点到另一个结点之间的通路,称为路径。

路径长度:在一条路径中,每经过一个结点,路径长度都要加 1 。

结点的权:给每一个结点赋予一个新的数值,被称为这个结点的权。

结点的带权路径长度:指的是从根结点到该结点之间的路径长度与该结点的权的乘积

树的带权路径长度为树中所有叶子结点的带权路径长度之和。通常记作 “WPL” 。

哈夫曼树:当用 n 个结点(都做叶子结点且都有各自的权值)构建一棵树时,如果构建的这棵树的带权路径长度最小,称这棵树为“最优二叉树”,有时也叫“赫夫曼树”或者“哈夫曼树”。

在构建哈弗曼树时,要使树的带权路径长度最小,需要遵循一个原则:权重越大的结点离树根越近

4.2构建过程

  1. 在 n 个权值中选出两个最小的权值,对应的两个结点组成一个新的二叉树,且新二叉树的根结点的权值为左右孩子权值的和;
  2. 在原有的 n 个权值中删除那两个最小的权值,同时将新的权值加入到 n–2 个权值的行列中,以此类推;
  3. 重复 1 和 2 ,直到所以的结点构建成了一棵二叉树为止,这棵树就是哈夫曼树。


文章参考:https://www.cnblogs.com/1873cy/p/18392848

                  重温数据结构:理解 B 树、B+ 树特点及使用场景-腾讯云开发者社区-腾讯云

相关文章:

  • 可视化大屏开发全攻略:技术与实践指南
  • 高并发内存池------threadcache
  • 蓝桥杯15届国赛 最小字符串
  • 豆包多轮对话优化策略:上下文理解与记忆,意图识别,对话管理
  • Matlab实现CNN-BiLSTM时间序列预测未来
  • 开关电源原理
  • Leetcode:回文链表
  • 为什么round(5.445,2)是5.44,如何改成5.45?
  • Python内置函数
  • JavaScript 笔记 --- part8 --- JS进阶 (part3)
  • springboot应用大批量导出excel产生oom处理措施实践(适用于poieasyexcel)
  • 面向对象与过程介绍
  • 【FreeRTOS-时间管理】
  • **集合**实验**
  • 《Python星球日记》第29天:Flask进阶
  • 信息系统项目管理师-软考高级(软考高项)​​​​​​​​​​​2025最新(八)
  • JobHistory Server的配置和启动
  • 字符串哈希专题
  • 36、C#中的⽅法声明参数关键字params,ref,out的意义及⽤法
  • Vue3响应式原理那些事
  • 山东滕州一车辆撞向公交站台撞倒多人,肇事者被控制,案件已移交刑警
  • 美权威人士批“特朗普对进口电影征关税”:将杀死美电影产业
  • 贵州游船侧翻248名消防员已在搜救
  • 张家口一景区观光魔毯疑失控致游客被甩出,涉事景区改造升级重新开园才3天
  • 菲律宾首都机场航站楼外发生汽车冲撞事故致2死多伤
  • 罗志田:文学革命的社会功能与社会反响