伸展树Splay Tree

伸展树是一种自平衡二叉查找树,通过分摊策略保持查找效率。文章介绍了伸展树的基本思想、数据局部性原理,并提供了可视化的学习资源。详细讲解了zig/zag旋转以及它们的各种组合,包括代码实现,最后提到了自顶向下和自底向上两种伸展树的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述

伸展树

伸展树是自平衡的二叉查找树,伸展树不像AVL树,要时刻保持平衡。伸展树通过分摊保持查找的高效率。
伸展树的基本思想:当一个节点被访问后,它就要进过一系列AVL树旋转被放在根上。

数据局部性

这里写图片描述

可视化伸展树

http://www.link.cs.cmu.edu/splay/
这个网站是伸展树的创始人做到一个project。将伸展树可视化。学伸展树的时候可以看看。

实现

由于数据结构与算法分析:C语言描述上面只是介绍了伸展树,但是没有代码实现。所以这篇blog主要写我是怎么实现伸展树的。

zig/zag

伸展树里最重要的一点就是zig/zag

zig

zig其实就是AVL的左旋
这里写图片描述

zag

zag其实就是AVL的右旋
这里写图片描述

zig/zag组合

有了zig,zag。就可以实现伸展树了。
伸展树通过zig,zag的组合来旋转。伸展式是通过两层旋转。为什么可以可见书上证明。

zig,zig组合

如果V是父节点的左儿子,V的父节点是V祖父节点的左儿子。如图:
这里写图片描述
这个时候要用zig,zig旋转,如图
这里写图片描述

zag,zag组合

如果V是父节点的右儿子,V的父节点是V祖父节点的右儿子。如图:
这里写图片描述
这个时候要用zag,zag旋转,如图
这里写图片描述

zig,zag组合

如果V是父节点的左儿子,V的父节点是V祖父节点的右儿子。如图:
这里写图片描述
这个时候要用zig,zag旋转,如图
这里写图片描述

zag,zig组合

如果V是父节点的右儿子,V的父节点是V祖父节点的左儿子。如图:
这里写图片描述
这个时候要用zig,zag旋转,如图
这里写图片描述

code:

上面的图终于搞完了。上代码:我没有使用书最后一章自顶而下的实现方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值