什么是树(平衡树,排序树,B树,B+树,R树,红黑树)

Posted 互联网编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是树(平衡树,排序树,B树,B+树,R树,红黑树)相关的知识,希望对你有一定的参考价值。

上一篇文章已经介绍过了数组和链表,下面我们看看两者查找和操作的时间开销

动作 数组 链表
静态操作(查找) O(1) O(N)
动态操作(插入、删除) O(N) O(1)

可以看到,已有的数据结构不能很好的平衡静态操作和动态操作的时间开销。所以引入了的概念

二叉排序树(也叫二叉搜索树,BST,Binary Search Tree)
  • 大于根节点的放在根节点的右子树上,小于根节点的放在根节点的左子树上(如果等于根节点,则可视情况而定)。

  • 如果写程序的话,可以采用递归的方式,而且由于不存在重叠子问题的情况,因此递归的性能已经足够好(不考虑栈溢出的情况)。

  • 二叉排序树在通常情况下可以达到O(lgN)的静态、动态操作的时间复杂度。

动作 数组 链表
二叉搜索树 O(logN) O(logN)

时间复杂度 O(1) < O(logN) < O(N) < O(NlogN) < O(N^2)

  • 存在一种特殊情况,即输入的数据本身就是有序的,这时二叉排序树退化成数组。

平衡二叉树(Self-balancing binary search tree)(AVL)
  • 为了消除二叉排序树对于输入敏感的特性,引入平衡二叉树

  • 保证每个节点左子树和右子树的高度差小于等于1就可以了

  • 左子树深度 - 右子树深度 = 平衡因子(小于等于1)

B树&B+树
  • b树(balance tree)和b+树应用在数据库索引

  • 数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。所以我们要减少IO次数,对于树来说,IO次数就是树的高度,而“矮胖”就是b树的特征之一,它的每个节点最多包含m个孩子,m称为b树的阶,m的大小取决于磁盘页的大小。

  • b+树,是b树的一种变体,查询性能更好。有n棵子树的非叶子结点中含有n个关键字(b树是n-1个),这些关键字不保存数据,只用来索引,所有数据都保存在叶子节点(b树是每个关键字都保存数据)

红黑树(R-B Tree)
  • 红黑树可以看做是二叉搜索树和AVL树的一个折中,可以尽量维持树的平衡,又不用话过多的时间来维持数据结构的性质。

  1. 每个结点要么是红的要么是黑的。

  2. 根结点是黑的。

  3. 每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。

  4. 如果一个结点是红的,那么它的两个儿子都是黑的。

  5. 对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点。

应用

  • 广泛用在C++的STL中。map和set都是用红黑树实现的。

  • 著名的linux进程调度Completely Fair Scheduler,用红黑树管理进程控制块。

  • epoll在内核中的实现,用红黑树管理事件块

  • nginx中,用红黑树管理timer等

  • Java的TreeMap实现


以上是关于什么是树(平衡树,排序树,B树,B+树,R树,红黑树)的主要内容,如果未能解决你的问题,请参考以下文章

二叉树平衡二叉树B树B+数红黑树(简述)

[转]数据结构中各种树

数据结构与算法:树 AVL平衡二叉排序树

二叉树平衡二叉树红黑树B-树B+树日等之间的详解和比较

简述AVL树红黑树B/B+树Trie树

LeetCode面试刷题技巧- B树习题集