算法学习之数据结构之红黑树(一)

  一,红黑树性质。

  由于二叉查找树知道,一个高度为h的二叉查找树可以实现任何一种基本的动态几何操作,如search,insert,minimum,delete,successor等操作,其时间都是O(h),这样树的高度低了就会执行的比较快,但是当树的高度较高时,操作的性能可能不比链表好。红黑树是许多“平衡的”查找树中的一种,他能保证在最坏的情况下,基本的动态集合操作的时间为O(lgn)。

  红黑树的性质。红黑树是一种二叉查找树,,每一个节点增加一个存储位表示节点的颜色,为红色或者黑色。红黑树确保没有一条路径会比其他路径长出两倍。因而是接近平衡的。
  树的每个节点包含五个域:color, parent, key, left, right。一个二查找树如果满足如下红黑性质,则为一个红黑树。
  1)每个节点或是红的,或是黑的。  
  2)根节点是黑。
  3)每个叶节点(NIL)是黑的。
  4)如果一个节点是红的, 则它的两个孩子都是黑的。
  5)对每个节点,从该节点到其子孙节点的所有路径上包含相同数目的黑节点。
  从某个节点x出发到达一个叶节点的任意一条路径上,黑色节点的个数成为该节点x的黑高度。
  一个有n个内节点的红黑树的高度至多为2lg(n+1)
  

  二、红黑树旋转。

  当对红黑树上进行insert和delete时,对树进行了修改,结果可能会违反红黑树的性质,所以需要改变树中的节点的颜色和指针结构,即需要进行旋转。
  左旋,假设它的右孩子节点y不是nil[T];x可以为树内任意右孩子不是nil[T]的节点,左旋以x和y之间的链为轴进行,它使y成为该子树新的根,x成为y的左孩子节点,而y的左孩子节点为x的右孩子。
  伪代码如下:
left-rotate(T, x)
y = right[x]
right[x] = left[y] // y的左子树变为x的右子树
parent[left[y]] 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值