数据结构——红黑树

平衡二叉树(AVL树)

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

问题

怎样让平衡二叉树在经过任意的插入和删除后,依然保持平衡?==>红黑树

红黑树 R-B Tree (自平衡二叉查找树)

红黑树也是二叉查找树,我们知道,二叉查找树这一数据结构并不难,而红黑树之所以难是难在它是自平衡的二叉查找树,在进行插入和删除等可能会破坏树的平衡的操作时,需要重新自处理达到平衡状态。

定义一:

红黑树是每个结点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:

  1. 结点是红色或黑色。
  2. 根是黑色。
  3. 所有叶子都是黑色(叶子是NIL结点,也称外结点)。
  4. 每个红色结点必须有两个黑色的子结点。(从每个叶子到根的所有路径
    不能有两个连续的红色结点。)
  5. 从任一结点到其每个叶子的所有简单路径都包含相同数目的黑色结点(包含的黑色结点的数育,称为该结点的黑高度)

例:
在这里插入图片描述树中的每个结点包括五个域: color , key , left , right和p。叶子结点是p为NIL (或null )的结点,可理解为标识查找失败的结点,它们到达根结点的路径上黑结点的数目是相同的。

定义二:

红黑树是每个结点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的T黑树我们增加了如下的额外要求:

  1. 把结点和父母结点的链接标识为红色或黑色两种;称为红链接和黑链接。
  2. 红链接均为左链接。
  3. 没有任何一个结点同时和两个红链接相连
  4. 该树是完美黑色平衡的,即任意空链接到根结点的路径上黑链的数目相同。

例:
在这里插入图片描述
利用定义二判断红黑树:
在这里插入图片描述

非红黑树转换为红黑树图示:

在这里插入图片描述红黑树结点定义

private class Node {
	private Key key;	//键
	private Value val;	//值
	private Node left, right; // 左右指针域
	private boolean color; //和父结点链接的颜色
	private int size;	// 对应子树的结点数
	
	public Node(Key key,Value val,boolean color,int size) { 
		this.key = key;
		this.val = val;
		this.color = color;
		this.size = size;
}

左旋转( rotateLeft )

在这里插入图片描述

private Node rotateLeft(Node h) { 
	Node x = h.right; 
	h.right = x.left;
	x.left = h;
	x.color = x.left.color; 
	x.left.color = RED;
	x.size = h.size;
	h.size = size(h.left) + size(h.right) + 1; 
	return X;

右旋转( rotateRight )

在这里插入图片描述

private Node rotateRight(Node h) {
	Node x = h.left;
	h.left = x.right; 
	x.right = h;
	x.color = x.right.color; 
	x.right.color = RED;
	x.size = h.size;
	h.size = size(h.left) + size(h.right) + 1;
	return X;

颜色转换( flipColors )

在这里插入图片描述

private void flipColors(Node h) {
h.color = !h.color;
h.left.color = !h.left.color;
h.right.color = !h.right.color;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值