探秘红黑树

一 概述

红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示结点的颜色,可以是RED或BLACK。通过对任意一条从根到叶子的简单路径上各个结点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出2倍,因此近似于平衡的。

红黑树中每个结点包含了5个属性:color,key,left,right和 p。如果一个结点没有子结点或父结点,则该结点响应指针属性的值为空,我们可以将这些空指针作为执行二叉搜索树的叶子节点或外部结点的指针,而把带关键字的结点视为树的内部结点。

二 红黑树的性质

一棵红黑树是满足下面红黑性质的二叉搜索树:

  1. 红黑树中的每个结点或是红色,或是黑色,根节点一定是黑色。
  2. 红黑树中的每个为NIL的叶子结点(不存在父节点和子节点也称为外部节点)都是黑色的。
  3. 红黑树中任意一个红色结点的父结点和子节点都不能为红色结点。
  4. 红黑树中的每个结点,从该结点到其所有后代叶子结点的简单路径上,均包含相同数目的黑色结点。

注:有性质4可得,如果一个结点存在黑色的子结点,那么该结点肯定有两个子节点。

三 红黑树的左旋,右旋和变色

左旋:以某节点P作为旋转结点,其右子结点V成为旋转结点P的父结点,右子结点V的左子结点R成为旋转结点的右子结点,左子结点X保持不变。

右旋:同样以某节点P作为旋转结点,其左子结点F成为旋转结点P的父结点,左子节点F的右子结点K成为旋转结点P的左子结点,右子树V保持不变。

由此可见旋转操作是局部的,同时,当一边子树的结点少了,那么将另一边子树的结点移过来;当一边子树多了,那么就会将一些结点移向另一边。

变色:结点的颜色右红色变黑或者是右黑变红。

由此可见红黑树总是通过旋转和变色使得树结构达到平衡状态。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值