数据结构之红黑树

1.红黑树的四大性质

  (1)每个节点不是红色就是黑色;

  (2)不可能有走在一起的红色节点;

  (3)根节点都是黑色;

  (4)每个红色节点的子节点都是黑色。叶子节点都是黑色。

  (5)从一个结点到该结点的所有子孙结点的所有路径上包含相同数目的黑结点

2.红黑树的几种变换

  (1)颜色变换

   当前结点的父亲是红色,且它的祖父节点的另一个子结点也是红色(叔叔节点)时,进行如下操作:

     把父节点设置为黑色;

     把叔叔节点设置为黑色;

     把祖父节点设置为红色;

     把指针知道祖父结点,将其定义为当前结点。

  (2)左旋

     左旋条件:当前父结点是红色,叔叔结点是黑色的时候,且当前结点是右子树,左旋以父节点作为左旋;

void leftRotate(Node node){
		Node tmp=node.right;
		if(tmp.left!=null){
			node.right=tmp.left;
			node.right.parent=node;
		}
		
		if(node.parent==null){
			tmp.parent=null;
			root=tmp;
		}else{
			tmp.parent=node.parent;
			if(node==node.parent.left){
				node.parent.left=tmp;
			}else{
				node.parent.right=tmp;
			}	
		}
		tmp.left=node;
		node.parent=tmp;
	}

  (3)右旋

     右旋条件:父结点是红色,叔叔结点是黑色,且当前结点是左子树,左旋以父结点作为左旋

void rightRotate(Node node){
		Node tmp=node.left;
		if(tmp.right!=null){
			node.left=tmp.right;
			node.left.parent=node;
		}
		
		if(node.parent==null){
			tmp.parent=null;
			root=tmp;
		}else{
			if(node.parent.left==node){
				node.parent.left=tmp;
			}else{
				node.parent.right=tmp;
			}
		}
		tmp.right=node;
		node.parent=tmp;
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值