数据结构-BST、AVL、二叉堆、B树、B+树、红黑树

总结了数据结构中树的一些常见的类型。

一、线索二叉树

对于n个结点的二叉树,在二叉链存储结构中有n+1个空链域,利用这些空链域存放在某种遍历次序下该结点的前驱结点和后继结点的指针,这些指针称为线索,加上线索的二叉树称为线索二叉树。

二、二叉查找树(BST)

二叉查找树又叫二叉排序树,二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于它的根节点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉排序树;
(4)没有键值相等的节点。

平均情况下查找时间复杂度为O(logn);最坏情况则是退化成一个链表,查找时间复杂度为O(n);

【传送门-数据结构——二叉搜索树(BinarySearchTree)的实现】

三、平衡二叉树(AVL)

AVL树可以看做是二叉查找树的升级版,它拥有二叉查找树的特性的同时,还规定了在AVL树中任何节点的两个子树的高度差最大不超过1,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(logn)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。

【传送门-数据结构——平衡二叉搜索树(AvlTree)的实现】

四、红黑树

红黑树(RBT)的定义:
它或者是一颗空树,或者是具有一下性质的二叉查找树:
1.节点非红即黑。
2.根节点是黑色。
3.所有NULL结点称为叶子节点,且认为颜色为黑。
4.所有红节点的子节点都为黑色。(约束了不会有连续的两个红节点)
5.从任一节点到其叶子节点的所有路径上都包含相同数目的黑节点。(约束了最长路径不大于2倍最短路径)

它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的:它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。

五、堆(Heap)

堆是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。
二叉堆一般用数组来表示。如果根节点在数组中的位置是1,第n个位置的子节点分别在2n和 2n+1。

六、B树(B-tree)

B树是一种树状数据结构,能够用来存储排序后的数据。这种数据结构能够让查找数据、循序存取、插入数据及删除的动作,都在对数时间内完成。B树,概括来说是一个一般化的二叉查找树(binary search tree),可以拥有多于2个子节点。与自平衡二叉查找树不同,B树为系统最优化大块数据的读和写操作。B-tree算法减少定位记录时所经历的中间过程,从而加快存取速度。这种数据结构常被应用在数据库和文件系统的实作上。

可以把B树看做是二叉树的一个泛化版本,阶为M的B树是具有一下特性的树:
1)数据项存储在叶子节点上;
2)非叶子节点存储直到M-1个关键字以指示子树搜索方向(关键字i代表子树i+1中的最小的关键字);
3)树的根或者是一个叶子节点,或者其儿子数在2和M之间;
4)除根外所有非叶子节点数都在[m/2]和M之间;
5)所有树叶都在相同的深度上,并有若干个数据。
B+或B-树基本定义都如上。

B树的特性

  1. 关键字集合分布在整颗树中;
  2. 任何一个关键字出现且只出现在一个结点中;
  3. 搜索有可能在非叶子结点结束;
  4. 其搜索性能等价于在关键字全集内做一次二分查找;
  5. 自动层次控制;

七、B+树

B+树是B树的变体,也是一种多路搜索树:

  1. 其定义与B树基本相同;
  2. 非叶子结点的子树指针与关键字个数相同;
  3. 非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树
    (B-树是开区间);
  4. 为所有叶子结点增加一个链指针;
  5. 所有关键字都在叶子结点出现;

八、B+的特性:

  1. 所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;
  2. 不可能在非叶子结点命中;
  3. 非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;
  4. 更适合文件索引系统;

PS: = =。所谓的B树就是所谓的B-树。。。。不知道那个傻逼翻译的B-tree为B-树。。。

你可能感兴趣的:(算法)