码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构-树

时间:2016-09-06 18:23:56      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

定义

树的定义有两种:

  1.是基于图论的定义;

  2.是基于递归和节点的定义;

1.基于图论的定义:

如果一个无向简单图G 满足以下相互等价的条件之一,那么G 是一棵

  • G 是没有回路连通图
  • G 没有回路,但是在G内添加任意一条,就会形成一个回路。
  • G 是连通的,但是如果去掉任意一条边,就不再连通。
  • G 是连通的,并且3顶点的完全图 {\displaystyle K_{3}}技术分享 不是G子图
  • G内的任意两个顶点能被唯一路径所连通。

如果无向简单图G有有限个顶点(设为n个顶点),那么G 是一棵还等价于:

  • G是连通的,有n − 1条边,并且G没有简单回路。

如果一个无向简单图G中没有简单回路,那么G森林

2.基于节点和递归的定义:

树(Tree)是n(n≥0)个有限数据元素的集合。当n=0 时,称这棵树为空树。在一棵非树T 中:
(1)有一个特殊的数据元素称为树的根结点,根结点没有前驱结点。
(2)若n>1,除根结点之外的其余数据元素被分成m(m>0)个互不相交的集合T1,T2,…,Tm,其中每一个集合Ti(1≤i≤m)本身又是一棵树。树T1,T2,…,Tm 称为这个根结点的子树。

可以看出,在树的定义中用了递归概念,即用树来定义树。因此,树结构的算法类同于二叉树结构的算法,也可以使用递归方法。

树的定义还可形式化的描述为二元组的形式:

T=(D,R)

其中D 为树T 中结点的集合,R 为树中结点之间关系的集合。

当树为空树时,D=Φ;当树T 不为空树时有:

D={Root}∪DF

其中,Root 为树T 的根结点,DF 为树T 的根Root 的子树集合。DF 可由下式表示:

DF=D1∪D2∪…∪Dm 且Di∩Dj=Φ(i≠j,1≤i≤m,1≤j≤m)

当树T 中结点个数n≤1 时,R=Φ;当树T 中结点个数n>1 时有:

R={<Root,ri>,i=1,2,…,m}

其中,Root 为树T 的根结点,ri 是树T 的根结点Root 的子树Ti 的根结点。

树定义的形式化,主要用于树的理论描述。图7.1(a)是一棵具有9 个结点的树,即T={A,B,C,…,H,I},结点A 为树T 的根结点,除根结点A 之外的其余结点分为两个不相交的集合: T1={B,D,E,F,H,I}和T2={C,G},T1 和T2 构成了结点A 的两棵子树,T1 和T2 本身也分别是一棵树。例如,子树T1 的根结点为B,其余结点又分为两个不相交的集合:T11={D},T12={E,H,I}和T13={F}。

T11、T12 和T13 构成了子树T1 的根结点B 的三棵子树。如此可继续向下分为更小的子树,直到每棵子树只有一个根结点为止。

从树的定义和图7.1(a)的示例可以看出,树具有下面两个特点:
(1)树的根结点没有前驱结点,除根结点之外的所有结点有且只有一个前驱结点。
(2)树中所有结点可以有零个或多个后继结点。

由此特点可知,图7.1(b)、(c)、(d)所示的都不是树结构。

技术分享

几种重要的树结构

技术分享

 

 

计算机科学中的树
二叉树
? 二叉树 ? 二叉查找树 ? 笛卡尔树 ? Top tree
? T树      
 
自平衡二叉查找树
? AA树 ? AVL树 ? 红黑树 ? 伸展树
? 树堆 ? 节点大小平衡树    
 
B树
? B树 ? B+树 ? B*树 ? Bx树
? UB树 ? 2-3树 ? 2-3-4树 ? (a,b)-树
? Dancing tree ? H树    
 
Trie
? 前缀树 ? 后缀树 ? 基数树  
 
空间划分树
? 四叉树 ? 八叉树 ? k-d树 ? vp-树
? R树 ? R*树 ? R+树 ? X树
? M树 ? 线段树 ? 希尔伯特R树 ? 优先R树
 
非二叉树
? Exponential tree ? Fusion tree ? 区间树 ? PQ tree
? Range tree ? SPQR tree ? Van Emde Boas tree  
 
其他类型

?  ? 散列树 ? Finger tree ? Metric tree
? Cover tree ? BK-tree ? Doubly-chained tree ? iDistance
? Link-cut tree ? 树状数组  

树的常用操作

技术分享

 

树的应用

 

树的名称

应用场景

Trie树

特点:保证字典序,存储字典的空间压缩率高

前缀搜索

正则匹配

数据压缩

数据库构建索引

 

C++

四叉树、八叉树

机器人领域,检测碰撞

 

文件系统的目录结构

 

路由协议

哈夫曼树

编码、压缩

B树、B+

分布式系统、mysql

BST二叉查找树

内存查找

AVL自平衡二叉树

内存查找

参考链接:

http://c.biancheng.net/cpp/html/985.html

https://zh.wikipedia.org/wiki/%E6%A0%91_(%E5%9B%BE%E8%AE%BA)

http://philoscience.iteye.com/blog/1112759

数据结构-树

标签:

原文地址:http://www.cnblogs.com/x739400043/p/5846673.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!