数据结构中的几种树
序号 | 类型 | 具体类型 | 具体类型 | 具体类型 | 具体类型 | 具体类型 |
---|---|---|---|---|---|---|
1 | 二叉树 | ⑴二叉树 | ⑵二叉查找树 | ⑶笛卡尔树 | ⑷T树 | ⑸Top Tree |
2 | 自平衡二叉查找树 | ⑴红黑树 | ⑵平衡二叉树(AVL) | ⑶伸展树 | ⑷树堆 | ⑸节点大小平衡树 |
3 | B树 | ⑴B树 | ⑵B+树(AVL) | ⑶B*树 | ⑷UB树 | ⑸2-3树 |
⑹2-3-4树 | ⑺(a,b)-树 | ⑻Dancing tree | ⑼H树 | |||
4 | Trie | 前缀树 | 后缀树 | 基数树 | ||
5 | 空间划分树 | ⑴四叉树 | ⑵八叉树 | ⑶k-d树 | ⑷vp树 | ⑸R树 |
⑹R-树 | ⑺X树 | ⑻M树 | ⑼线段树 | ⑽希尔伯特R树 | ||
⑾优先R树 | ||||||
6 | 非二叉树 | are neat | ||||
7 | 其他类型 | are neat |
树的概念
1. 树与子树
树(Tree)是n(n>=0)个结点的有限集。在任意一棵非空树中:
⑴有且仅有一个特定的称为根的结点
⑵当n>1时,其余结点可分为m(m>0)个互不相交有限集T1,T2,……,Tm ,其中每一个集合本身又是一棵树,并且称为根的**子树**
2.树的基本数据操作
ADT Tree{
- 数据对象D:D是具有相同特性的数据元素的集合。
- 数据关系R:若D为空集,则称为空树;
- 若D仅含一个数据元素,则R为空集,否则R={H},H是如下二元关系:
⑴在D中存在唯一的称为根的数据元素rrot,他在关系H下无前驱
⑵若D-{root}!=空集合,则存在D-{root}的一个划分D1,D2,……,Dm(m>0),对任意 j!=k(1<=j,k<=m)有Dj∩Dk=空集,且对于任意的i(1<=i<=m)唯一存在数据元素Xi属于Di,有{root,Xi}属于H;
⑶对应于D-{root}的划分,H-{{root,xi},……,{root,xm}}有唯一的一个划分H1,H2,……,Hm(m>0),对任意j!=k(1<=j,k<=m)有Hj∩Hk=空集,且对于任意的i(1<=i<=m),Hi是Di上的二元关系,(Di,{Hi})是一棵符合本定义的树,称为根root的子树
- 若D仅含一个数据元素,则R为空集,否则R={H},H是如下二元关系:
基本操作P:
⑴ InitTree(&T); 操作结果:构造空树T。 ⑵ DestroyTree(&T) 初始条件:树T存在。 操作结果:销毁树T。 ⑶CreateTree(&T,definition): 初始条件:definition给出树T的定义 操作结果:按definition构造树T ⑷ClearTree(&T) 初始条件:树T存在 操作结果:将树T清为空树 ⑸TreeEmpty(T) 初始条件:树T存在 操作结果:若T为空树,则返回TRUE,否则FALSE ⑹Root(T) 初始条件:树T存在 操作结果:返回T的根 ⑺Value(T,cur_e) 初始条件:树T存在,cur_e是T中某个结点。 操作结果:返回cur_e的值 ⑻Assign(T,cur_e, value) 初始条件:树T存在 操作结果:结点cur_e赋值为value ⑼Parent(T,cur_e) 初始条件:树T存在,cur_e是T中某个结点。 操作结果:若cur_e是T的非根节点,则返回它的双亲,否则函数值为“空”。 ⑽LeftChild(T,cur_e) 初始条件:树T存在,cur_e是T中某个结点。 操作结果:若cur_e是T的非叶子结点,则返回它的最左孩子,否则返回“空” ⑾RightSibling(T,cur_e) 初始条件:树T存在,cur_e是T中某个结点。 操作结果:若cur_e有右兄弟,则返回它的右兄弟,否则函数值为“空” ⑿InsertChild(&T,&p,i,c) 初始条件:树T存在,p指向T中某个结点,1<=i<=p所指结点的度+1,非空树c与T不想交。 操作结果:插入c为T中p指结点的第i棵子树 ⒀DeleteChild(&T,&p,i) 初始条件:树T存在,p指向T中某个结点,1<=i<=p指结点的度 操作结果:删除T中p所指结点的第i棵子树。 ⒁TraverseTree(T,Visit()) 初始条件:树T存在,Visit是对结点操作的应用函数。 操作结果:按某种次序对T的每个结点调用函数Visit()一次且至多一次。一旦Visit()失败,则操作失败
3.树的基本术语
⑴ 结点的度:树中一个结点的子节点个数称为结点的度
⑵ 树的度:树中结点的最大度数称为树的度
⑶ 分支结点:度大于0的结点(又称为非终端结点)
⑷ 叶子结点:度等于0(没有子女结点)的结点称为叶子结点。
⑸结点的层次:从树根开始定义,根结点为第一层 (有的也把根结点当为第0层)
⑹结点的深度:是从根节点开始自顶向下逐层累加的
⑺ 节点的高度:从根节点开始自底向上逐层累加
⑻ 树的高度(又叫深度):是树中结点的最大层数
⑼ 路径和路径长度:树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的。路径长度是路径上所经过的边的个数。
⑽有序树:如果将树中结点的各子树看成从左至右是有次序的(即不能互换),则称该树是有序数,否则称为无序树
⑾森林:是m(>=0)棵互不相交的树的集合。森林的概念与树的概念十分相近,因为只要把树的跟删除就成了森林。