理解红黑树

关于红黑树,这个名字的来历就说多说了,是Guibas和Sedgewick也算是看了好多遍,但没有一次真正理解过,也没有去实现它。

 

红黑树满足二叉查找树的所有性质,不同的是它近似平衡,所有的操作都可以在O(lg(n))内完成,所以效率比较高,先列出红黑树的5条性质:

1、每个结点或者是红的,或者是黑的

2、根结点是黑的

3、每个叶子结点是黑的(这里的叶结点是外部结点,貌似只在统计黑结点个数的时候用)

4、如果一个结点是红的,那么它的两个儿子都是黑的(其实也还说明它的父亲结点也是黑的,否则就会存在一个红色结点的儿子是红的)

5、Every simple path from a given node to any of its descendant leaves contains the same number of black nodes(这点用维基上的,感觉导论上的不是很好懂)

 

插入和删除增加或者减少一个结点,会改变树的结构,为了保证任何一种动态集合上的操作的时间都是O(lg(n)),就需要再插入和删除的过程中做一些调整,这些调整包括对一些结点修改颜色和做旋转。

 

先看看左旋和右旋(来自导论)

旋转前后各个子树要保持原来的顺序,以下是右旋的代码:

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值