sbt-size balanced tree学习笔记

sbt的详尽资料:http://www.nocow.cn/index.php/Size_Balanced_Tree

个人理解:

先贴自己写的(虽然和cqf大牛的程序如出一辙..原因是太佩服cqf大牛的写法了.)

  

 这个代码只实现了插入、求前驱、排序输出三个功能,但核心部分已经写好了----maintain。其他几个功能的实现,可以参考cqf大牛的官方程序。

attention部分:一开始没有马上理解这个语句,仔细看了下后才理解。这个语句之前,t的左右儿子已经发生了改变,所以顺理成章地,s[t]等于它的左右儿子大小之和加1.佩服cqf大牛写程序时清晰的逻辑!

对insert(var t,v:longint)的理解:这里t前面有个var,使得插入新节点的过程中,该节点的父亲“自动”与它相连,使得代码精炼高效;每次递归完之后,t的值都会被赋值为树根(在maintain中),相当巧妙。

对maintain的理解:对树进行调整的过程,是整个程序中最关键的过程之一。flag用于减少无用计算,属于常数优化。需要优化的情况可以分为两大类,共四种情况,分别用对应maintain过程中的四个if中的旋转操作再递归作用就行了。最后为什么不用maintain(left[t],true)和maintain(right[t],false),cqf大牛的论文里有提及。自己画图看看就明白了。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值