红黑树的由来

  我们的日常生活中已经离不开搜索了,比如我们网购时需要搜索我们感兴趣的商品,浏览网页也会搜索我们感兴趣的人或事…,搜索是计算机数据结构与算法中最重要的功能。

  1. sequential search顺序搜索
      顺序搜索是最简单的搜索方式,它只能一个一个比较查找元素,当数据比较多的时候搜索速度极慢,搜索代价比较高。
  2. Binary search 二分查找
      二分查找的前提是查找的序列是有序的,每次查找的时候将区间一分为二,每次可以去除一半不符合条件的元素,所以搜索速度很快,时间复杂度为O(log2n) 。
      但是二分查找也存在问题,当我们需要插入删除一个元素的时候通常需要移动大量的元素,导致效率低下。
  3. Binary Search Tree(BST)
      为了克服二分查找插入和删除元素效率低下同时又保持高速查找的问题,二分查找树应运而生。二分查找树的查找效率和二分查找是一样的,同时插入和删除操作又不需要移动大量元素。
      二叉查找树性质:对于每一个节点左子树的节点均小于该节点,右子树上的节点均大于该节点。
    在这里插入图片描述
      搜索过程:共根走到叶子,时间复杂度O(h).
      这里有一个问题,如何二叉树不是平衡二叉树的,像下图中右侧的情况则走向了一个极端,这时树的结构就退化成了线性结构,这时查找最坏的复杂度就是O(h)。
    在这里插入图片描述
  4. AVL Tree 平衡二叉树
      为了防止二叉树出现极端的情况,有学者提出了平衡二叉树。平衡二叉树是指任何节点左子树和右子树的高度差不超过1.
balance factor = |Height(RightTree)-Height(LeftTree)| <= 1

  平衡二叉树高度: h = ⌊ log ⁡ 2 n ⌋ + 1 {\rm{h}} = \left\lfloor {\log _2^n} \right\rfloor + 1 h=log2n+1,n指节点个数。
  对于平衡二叉树插入或者删除节点时可能会导致二叉树失去平衡,这时需要对失去平衡的二叉树进行旋转以再次使得二叉树达到平衡状态。
5. Red-Black Tree(RBT) 红黑树
  当平衡二叉树插入或者删除节点时可能会导致平衡二叉树的失衡,这时我们需要“旋转”二叉树以使得二叉树再次达到平衡,但是“旋转”二叉树会提高算法的代价,为了解决这个问题,学者提出了红黑树的概念。

红黑树概念

  • 红黑树是一种自平衡二叉树,它的节点有且仅有红色和黑色两种颜色。
  • 红黑树在插入和删除过程中比AVL树需要旋转的次数少,但是也不像AVL那么平衡。
  • 如果插入和删除的频率很低,而查找的频率很高,则更推荐使用平衡二叉树。

红黑树的性质:

  1. 红黑树的根节点和叶子结点必须是黑色的,其它每个节点非黑即红。
  2. 红色节点的孩子必须是黑色节点,而黑色节点的孩子可以是黑色节点。
  3. 对于每一个节点,所有简单路径到叶子结点的黑色节点数目是相同的。
  4. 红黑树的高度最多是 log ⁡ 2 ( n + 1 ) {\log _2}(n + 1) log2(n+1)
  • 在红黑树中空指针是叶子结点,而其他的节点叫做Internal node。
    在这里插入图片描述
    黑色高度:因为红黑树从每个节点到叶子结点的黑色节点数是一样的,因此RBT的平衡也叫作黑色完美平衡。
    在这里插入图片描述
      红黑树的一个用途:k-v(key-value存储),它查询的速度是,查询速度并不快,hash查询的速度是O(1),相比之下hash查询速度快很多。但是hash存储在存储之前我们需要初始化的空间有多少,而在很多场景下我们是无法提前预知数据存储量的,而RBT不需要提前预知数据量,可以随时添加节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值