平衡二叉树算法及代码.pdf

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
平衡二叉树算法及代码

Size Balanced Tree Size Balanced Tree(SBT)是一种平衡二叉查找树。它的论文由中国广东中山纪念中学的陈启峰 于2006 年底完成,并在Winter Camp 2007 中发表。由于SBT 的拼写很容易找到中文谐音,它 常被中国的OIer 们戏称为“傻X 树”、“Super BT ”等。但它的性能并不SB,编写起来也并 不BT。恰恰相反,SBT 易于实现,且据陈启峰论文中所言,“这是目前为止速度最快的高级二 叉有哪些信誉好的足球投注网站树”。它能在O(logn)的时间内完成所有BST 的相关操作。而且由于SBT 赖以保持平衡 的是Size 域而不是其他“无用”的域,它可以很方便地实现动态顺序统计中的select 和rank 。  性质 Size Balanced Tree (SBT )是一种通过大小(Size )域来保持平衡的二叉有哪些信誉好的足球投注网站树,它也因此得 名。它总是满足: 对于SBT 的每一个结点 t : 1. 性质(a) s[right[t] ] ≥s[left[left[t]]],s[right[left[t]]] 2. 性质(b) s[left[t] ] ≥s[right[right[t]]] ,s[left[right[t]]] 即每棵子树的大小不小于其兄弟的子树大小。 图1 如图(圈代表结点,三角代表SBT,下同): 1. s[R] ≥ s[A],s[B] 2. s[L] ≥ s[C],s[D] 旋转 SBT 的旋转(Rotations)与其他许多高级BST 相同。它是下面提到的Maintain 操作的基础。 图2 [编辑]左旋转 Left-Rotate (t) 1 k ← right[t] 2 right[t] ← left[k] 3 left[k] ← t 4 s[k] ← s[t] 5 s[t] ← s[left[t]] + s[right[t]] + 1 6 t ← k 右旋转 Right-Rotate(t) 1 k ← left[t] 2 left[t] ← right[k] 3 right[k] ← t 4 s[k] ← s[t] 5 s[t] ← s[left[t]] + s[right[t]] + 1 6 t ← k 保持性质(Maintain) 当我们插入或删除一个结点后,SBT 的大小就发生了改变。这种改变有可能导致性质(a)或(b)被 破坏。这时,我们需要用Maintain 操作来修复这棵树。Maintain 操作是SBT 中最具活力的一 个独特过程;Maintain(T)用于修复以T 为根的 SBT 。调用Maintain(T)的前提条件是T 的子树都 已经是SBT 了。 我们需要讨论的有4 种情况。由于性质a 和性质b 是对称的,所以我们仅仅详细的讨论性质a 。 1. 第一种情况:s[left[left[t]]s[right[t]] 图3 (同图1) 如图3,执行完Insert(left[t],v)后发生S[A]S[R],我们可以执行以下的指令来修复SBT : 1. 首先执行Right-Ratote(t),这个操作让图3 变成图4 ; 图4 2. 在这之后,有时候这棵树还仍然不是一棵SBT,因为 s[C]s[B] 或者 s[D]s[B] 也是可能发生的。所以就有必要继续调用Maintain(T)。 3. 结点L 的右子树有可能被连续调整,因为有可能由于性质的破坏需要再一次运 行Maintain(L)。 2. 第二种情况:s[right[left[t]]s[right[t]] 图5 在执行完Insert(left[t],v)后发生s[B]s[R],如图5,这种调整要比情况1 复杂一些。

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档