树
术语
- 根
- 孩子
- 叶子:数中没有孩子的元素
- 级:元素的级别 = 父母级别 + 1, 树根的级为1
- 树的高度:树的级数
- 元素的度:孩子数
- 树的度: 元素度最大值
二叉树
- 二叉树可以为空,普通树不可以。
- 二叉树每个元素最多有两个元素
- 二叉树,左右元素是有序的,可以区分,其他树的字数之间是无序的。
二叉树的特性
- 有n个元素的二叉树,有n-1条边
- 二叉树高度为h,最多有 2h−12^h -12h−1个元素,第 i 层有 2i−12^{i-1}2i−1个元素
- 有n个元素的二叉树最高为 n ,最小为 ⌈(log2(n+1))⌉\left \lceil (log_2(n+1))\right \rceil⌈(log2(n+1))⌉
- 二叉树中度为 0 的元素数 = 度为 2 元素数 + 1
满二叉树
各层都满,可以对 1 到 2h−12^h-12h−1 进行标号
完全二叉树
- 前h-1 层为满二叉树
- 第h层,连续排于第h层左端
完全二叉树高度 ⌈(log2(n+1))⌉\left \lceil (log_2(n+1))\right \rceil⌈(log2(n+1))⌉
二叉树的数组描述
- 完全二叉树,从上到下从左到右
- 编号从1开始,父节点是 i ,左右孩子分别在 2i 、2i+1

- 二叉树可以看作是缺少了部分元素的完全二叉树

右斜的二叉树存储空间最大
二叉树链表描述

二叉树的遍历方法
- 前序遍历: 访问根元素、遍历左子树、遍历右子树
- 中序遍历: 遍历左子树、访问根节点、遍历右子树
- 后序遍历:遍历左子树、遍历右子树、访问根节点
- 层次比哪里: 从上往下逐层,从左到右的次序访问元素
前序序列和中序序列 或者由后序序列和中序序列能为一确定一棵二叉树
中序序列区分左右子树,前序、后序确定元素顺序。
树和森林的二叉树表示
树的二叉树表示:


二叉树的模拟指针表示

树的父母表示方法:

树的孩子表示法:

前序遍历的非递归实现



线索化二叉树
- 通过二叉树的遍历,将二叉树所有元素排列在一个线性序列中,可以找到某元素的前驱和后继

m叉树
m叉搜索树
特征:
- 每个内部节点最多有m个子女,1~m-1个元素
- 每个含 p个元素的节点,有 p+1 个子女
- 节点内 元素关键字,子树关键字有序排列。
删除
-左右子树都为空,直接删除
- 相邻子树一个不空,从不空的相邻子树中找一个元素替换被删除的元素
- 删除元素相邻子树都不控,从不空的相邻子树中找一个元素替换被删除的元素
m阶B 树
特征:
- 根节点至少两个孩子
- 出了根节点,所有内部节点至少 ⌈m/2⌉\left \lceil m/2 \right \rceil⌈m/2⌉ 个孩子, ⌈m/2⌉−1\left \lceil m/2 \right \rceil - 1⌈m/2⌉−1 个元素
- 所有外部节点都位于同一层


插入
- 当新元素插入到饱和节点时,饱和节点需要被分裂
- 节点从 ed 处分裂此节点, d= ⌈m/2⌉\left \lceil m/2 \right \rceil⌈m/2⌉

删除
-
1 被删除元素的孩子均在外部节点中(元素在树叶中);被删除元素所在的节点有多余最少数目的元素
直接删除就好了 -
2 被删除元素的孩子均在外部节点中(元素在树叶中);被删除元素所在的节点元素数目为最小值
(1) 最邻近的兄弟有多余元素,替换到父节点中,将父节点中的元素换下来
(2) 最临近的兄弟有最少数目元素,将两兄弟和兄弟之间的元素合并成一个节点 -
3 当被删除的元素在非树叶节点中,可以用左相邻子树的最大元素,也可以用右相邻子树的最小元素替换被删除的元素。 使得转成上两种情况
B+ 树


- 既可以顺序查找,又可以随即查找
本文详细探讨了二叉树的基本概念、特性,如度、高度和遍历方法,以及二叉树的不同类型(满二叉树、完全二叉树),并重点剖析了B树的结构、插入与删除操作。同时涵盖了B+树的特点,以及它们在数据存储和检索中的应用。
8055

被折叠的 条评论
为什么被折叠?



