《DSAA》 12.1 自顶向下伸展树

在许多应用中,当一个节点被访问后,马上就很可能再次被访问到,研究表明这种情况比人们预料的要频繁的多。所以伸展树的基本想法是:当一个节点被访问后,它就要通过一系列的旋转被放到根上。
自顶向下伸展树的搜索方式非常独特,它实际上是一个拆了又装的过程,这个过程被称为伸展:
最开始先新建两颗空树:L树和R树,用于缓存。在从原树自顶向下搜索时,每一次迭代都将父节点以上的部分拆除,视情况接到两旁的L树或R树上,直到搜索结束,这时用L树和R树接到到根上,而把根上原来的左右子树分别接到L树和R树上,处理完毕。
此时的树根就是所要寻找的节点,或者是一个最接近的节点。
值得一提的是:由于伸展树的特性,它的删除操作比其他的二叉搜索树要容易得多,因为搜索的结果使 要删除的节点挪到了根上,之后的操作很巧妙:在左子树中反过来搜索根,这样做的结果是左儿子的右子树因为旋转而消失了,于是可以把根的右子树接到左儿子上,根自然被删除。
关于自顶向下伸展树的操作,原书中给出了很简洁漂亮的实现,由上面的例子可见一斑。
以下演示是一颗树的逐节点删除过程,用的是后文红黑树用的例子,对照一下这两种树的运行也很有趣:



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值