算法导论第七天学习笔记

算法导论第七天学习笔记

红黑树

红黑树的性质

  1. 每个节点或是红色的,或是黑色的。
  2. 根节点是黑色的。
  3. 每个叶节点(NIL)是黑色的。
  4. 如果一个节点是红色的,则它的两个子节点都是黑色的。
  5. 对每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。

一颗有n个内部节点的红黑树的高度至多为2lg(n+1)。

旋转

左旋和右旋

LEFT-ROTATE(T, x):
	y = x.right
	x.right = y.left
	if y.left != T.nil
		y.left.p = x
	y.p = p
	if x.p == T.nil
		T.root = y
	else if x == x.p.left
		x.p.left = y
	else 
		x.p.right == y
	y.left = x
	x.p = y

插入

RB-INSERT(T, z):
	y = T.nil
	x = T.root
	while x != T.nil
		y = x
		if z.key < x.key
			x = x.left
		else
			x = x.right
	z.p = y
	if y == T.nil
		T.root = z
	else if z.key < y.key
		y.left = z
	else 
		y.right = z
	z.left = T.nil
	z.right = T.nil
	z.color = RED
	RB-INSERT-FIXUP(T, z)

RB-INSERT-FIXUP(T, z)while z.p.color == RED
		if z.p = z.p.p.left
			y = z.p.p.right
			if y.color == RED
				z.p.color = BLACK
				y.color = BLACK
				z.p.p.color = RED
				z = z.p.p
			else if z == z.p.right
				z = z.p
				LEFT-ROTATE(T, z)
			z.p.color = BLACK
			z.p.p.color = RED
			RIGHT-ROTATE(T, z.p.p)
		else
			(same as then clause with "right" and "left" exchanged)
	T.root.color = BLACK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值