数据结构--树

来源:互联网 发布:windows系统评级 编辑:程序博客网 时间:2024/04/30 07:28

一、树

1、树的概念

        树比较普遍的概念是

树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:
(1)有且仅有一个特定的称为根(Root)的结点;
(2)其余的结点可分为m(m≥0)个互不相交的子集Tl,T2,…,Tm,其中每个子集本身又是一棵树,并称其为根的子树(Subree)。

        还有一种概念是

树是一个非闭环图,从中选择一个结点为根结点。

结点的度:该结点下的分支数,即子树的个数。

结点的层次:从根结点到此结点所经历的分支的个数。一般定义根结点的层次为1或者为0.

叶子结点:度为0的结点。

树的度:树中所有结点的度的最大值。

树的深度:树中所有结点的层次数的最大值。

森林:若干个互不相关联的树的集合。一棵树是一个特殊的森林。一棵树去掉根结点就变成了森林,同理,森林加上一个根结点就变成了树。

有序树:一棵树的所有子树结点的值按从左到右的顺序是有次序的,即左右不能互换。(这个概念一直没有搞清楚,网上说法一直也不统一:是左和右的位置有次序不能互换,还是左和右位置上的值是有次序的?这个问题的延伸问题就是二叉树是不是有序树。期待各位老师解答)。

2、树的特征

(1)除了根以外,所有的结点都有且只有一个前趋,除了叶子结点以外,所有结点都可以有多个后继。

(2)祖先与子孙的关系是父子关系的延续,它定义了树纵向关系的次序。

(3)(这个特征和有序树的定义有关)在有序树中,同一结点的孩子有左右之分(长幼之分),

扩展开来,就是左孩子的所有孩子都在右孩子所有孩子的左边,这就定义了有序树的横向关系的次序。

3、树的大概分类以及各自的特征和用途。

(1)二叉树

二叉树是每个结点最多有两个孩子的树形结构。他的孩子有左右之分。

完全二叉树:若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第h层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。

满二叉树:和完全二叉树的区别就是最后一层叶子结点也达到最大个数。即若一个二叉树的深度为k,则其结点数位2^k-1。

满二叉树和完全二叉树叶子结点的层数和树的深度想等。

二叉排序树:又叫二叉查找树,二叉搜索树。它可以为空树,若不为空,他是具有下列性质的二叉树:

1、若结点有左子树,则左子树结点的所有值小于这个结点的值。

2、若结点有右子树,则右子树结点的所有值大于这个结点的值。

3、二叉排序树中没有相等的值。

二叉排序树,查找很快,时间复杂度为O(logn).所以对于一个结点数为n的二叉排序树来说,其高度一般为logn。查找步骤如下:若要查找的值等于根结点的值,成功

若查找的值小于根结点的值,则递归查找左子树,若查到则成功。若查找的值大于跟结点的值,则递归查找右子树,若查到则成功。

平衡二叉树:他是一颗空树或者具有以下性质,根结点的左右两颗子树的高度差的绝对值不超过1.并且左右子树也是平衡二叉树。平衡二叉树一定是二叉排序树。

二叉树结点的平衡因子定义为该结点的左子树的深度减去右子树的深度。则平衡二叉树的所有结点的平衡因子只可能是-1,0,1

在某些极端的情况下(如在插入的序列是有序的时),二叉搜索树将退化成近似链或链,此时,其操作的时间复杂度将退化成线性的,即O(n)。我们可以通过随机化建立二叉搜索树来尽量的避免这种情况,但是在进行了多次的操作之后,由于在删除时,我们总是选择将待删除节点的后继代替它本身,这样就会造成总是右边的节点数目减少,以至于树向左偏沉。这同时也会造成树的平衡性受到破坏,提高它的操作的时间复杂度。在平衡二叉搜索树中,我们可以看到,其高度一般都良好地维持在O(logn),大大降低了操作的时间复杂度。

(2)红黑树

  

(图c)

  红黑树是一种自平衡二叉树,在平衡二叉树的基础上每个节点又增加了一个颜色的属性,节点的颜色只能是红色或黑色。具有以下性质:
(1)根节点只能是黑色;
(2)红黑树中所有的叶子节点后面再接上左右两个空节点,这样可以保持算法的一致性,而且所有的空节点都是黑色;
(3)其他的节点要么是红色,要么是黑色,红色节点的父节点和左右孩子节点都是黑色,及黑红相间;
(4)在任何一棵子树中,从根节点向下走到空节点的路径上所经过的黑节点的数目相同,从而保证了是一个平衡二叉树。


(3)B-树

(图d)

  B-树是一种平衡多路查找树,它在文件系统中很有用。一棵m阶B-树(图d为4阶B-树),具有下列性质:
(1)树中每个节点至多有m棵子树;
(2)若根节点不是叶子节点,则至少有2棵子树;
(3)除根节点之外的所有非终端节点至少有棵子树;
(4)每个节点中的信息结构为(A0,K1,A1,K2......Kn,An),其中n表示关键字个数,Ki为关键字,Ai为指针;
(5)所有的叶子节点都出现在同一层次上,且不带任何信息,也是为了保持算法的一致性。

(4)B+树

(图e)

  B+数是B-树的一种变形,它与B-树的差别在于(图e为3阶B+树):
(1)有n棵子树的节点含有n个关键字;
(2)所有的叶子节点包含了全部关键字的信息,及指向这些关键字记录的指针,且叶子节点本身按关键字大小自小到大顺序链接;
(3)所有非终端节点可以看成是索引部分,节点中仅含有其子树(根节点)中最大(或最小)关键字,所有B+树更像一个索引顺序表;
(4)对B+树进行查找运算,一是从最小关键字起进行顺序查找,二是从根节点开始,进行随机查找。

(5)、字典树(trie树)

(图f)

  字典树是一种以树形结构保存大量字符串。以便于字符串的统计和查找,经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。具有以下特点(图f):
(1)根节点为空;
(2)除根节点外,每个节点包含一个字符;
(3)从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
(4)每个字符串在建立字典树的过程中都要加上一个区分的结束符,避免某个短字符串正好是某个长字符串的前缀而淹没。



0 0
原创粉丝点击