要知道红黑树,必须先了解平衡二叉树的概念。

从网上引用一下它的概念:

平衡二叉树:它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。

平衡二叉树最直接的好处就是它的查找在平均和最坏的情况下都是O(logn)。这得益于它时刻维护着二叉树的平衡。

但是如果在AVL树中插入或删除节点后,使得高度之差大于1。此时,AVL树的平衡状态就被破坏,它就不再是一棵二叉树;为了让它重新维持在一个平衡状态,就需要对其进行旋转处理, 那么创建一颗平衡二叉树的成本其实不小(详细平衡二叉树概念和维护调整方法参考博客)。

鉴于以上情况,有人提出了红黑树理论。

红黑树与AVL树的比较:

1.AVL树的时间复杂度虽然优于红黑树,但是对于现在的计算机,cpu太快,可以忽略性能差异 
2.红黑树的插入删除比AVL树更便于控制操作 
3.红黑树整体性能略优于AVL树(红黑树旋转情况少于AVL树)

 

红黑树的性质:

红黑树是一棵二叉搜索树,它在每个节点增加了一个存储位记录节点的颜色,可以是RED,也可以是BLACK;通过任意一条从根到叶子简单路径上颜色的约束,红黑树保证最长路径不超过最短路径的二倍,因而近似平衡。

具体性质如下:

  1. 每个节点颜色不是黑色,就是红色
  2. 根节点是黑色的
  3. 如果一个节点是红色,那么它的两个子节点就是黑色的(没有连续的红节点)
  4. 对于每个节点,从该节点到其后代叶节点的简单路径上,均包含相同数目的黑色节点

红黑树的插入方式:

  1. 根节点为NULL,直接插入新节点并将其颜色置为黑色
  2. 根节点不为NULL,找到要插入新节点的位置
  3. 插入新节点
  4. 判断新插入节点对全树颜色的影响,更新调整颜色

 

.

posted on 2019-11-28 09:51  hole_cheng  阅读(112)  评论(0编辑  收藏  举报