数据结构—AVL树(二叉查找树)、红黑树

AVL树:

avl树是带有条件的二叉查找树,

平衡条件:每个节点的左子树和右子树的高度最多差1的二叉查找树

如果出现了不平衡可以进行左旋或右旋进行调整,使树达到平衡。

优点:查找速度快,添加树节点慢

红黑树:

条件:从一个节点开始,左子树和右子树两边的高度只差不超过2倍。

优点:查找速度虽然仅次于avl树,但是红黑树的添加节点的速度快。

特征:

1.节点都有颜色

2.在插入和删除的过程中,要遵循保持这些颜色的不同排列的规则

红-黑规则

当插入(或者删除)一个新节点时,必须要遵循一定的规则,它们被称为红-黑规则。如果遵循这些规则,树就是平衡的,规则如下:

1.每一个节点不是红色的就是黑色的。

2.根结点总是黑色的。

3.每个叶子节点都是黑色的。

3.如果节点是红色的,则它的子节点必须是黑色的(反之到不一定必须为真)

4.从根结点或空子节点的每条路径,必须包含相同数目的黑色节点。

修正方法:

1.改变节点颜色

2.执行旋转操作

右边不平衡->左旋

下面列出几个case以及解决办法

case1:

现象:当前节点的父节点是红色,且当前节点的祖父节点的另一个子节点(叔叔节点)也是红色。

处理策略:

第一步:将父节点设为黑色

第二步:将叔叔节点设为黑色

第三步:将祖父节点设为红色

第四步:将祖父节点设为当前节点(红色节点);即,之后继续对当前节点进行操作

case2:

现象:当前节点的父节点是红色,叔叔节点是黑色,且当前节点是其父节点的右孩子

处理策略:

第一步:将父节点作为新的当前节点

第二步:以新的当前节点为支点进行左旋

case3:

现象:当前节点的父节点是红色,叔叔节点是黑色,且当前节点是其父节点的左孩子

处理策略:

第一步:将父节点设为黑色

第二步:将祖父节点设为红色

第三步:以祖父节点为支点进行右旋

 

未完,待续...

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值