平衡二叉树、红黑树、B+树比较

平衡二叉树

性质:

  • 每个节点最多有2个子节点
  • 左右子树高度差不超过1
  • 当前节点值大于左孩子,小于右孩子

缺陷:每次插入、删除都需要大量的左旋右旋操作

红黑树

红黑树弥补了平衡二叉树插入删除的问题

性质:

  • 根节点为黑色
  • 红节点的子节点必为黑色
  • 从根节点到任意一个节点,包含相同数目的黑色节点

STL中红黑树(map, set)的迭代器实现:

  1. 第一个节点是树中最小的节点
  2. 如果存在右子树,则下一个节点是右子树的最小节点
  3. 如果不存在右子树,则向上寻找。找到一个节点其右节点未被遍历过,则这个节点是下一个节点,找不到意味着完成遍历

整体过程类似中序遍历

B树与B+树

B树是一种多路查找树,节点中有多个key,表示子节点值的区间。插入与删除时,会改变节点中key的数目

B+树:

  • 只有叶子节点包含数据
  • 每个非叶子节点的key数目相同,插入删除时不改变非叶子节点数目
  • 叶子节点用一个链表串起来,方便快速遍历

与红黑树比较:B树/B+树时多叉的,查询时间复杂度都为O(logn),不过当数据块在磁盘上时,B+树的磁盘IO数目更少,应为用链表串起来了