码迷,mamicode.com
首页 > 其他好文 > 详细

平衡二叉树之splay p1998

时间:2019-02-11 21:37:19      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:image   简单   center   play   .net   时间   blog   style   text   

  splay是如何减少时间复杂度呢?让我先研读一下代码QAQ每次访问某个节点时都把它旋转到根节点.

  以下转自https://blog.csdn.net/qq_31640513/article/details/76944892

  共有三种情况.

技术图片

技术图片

技术图片

技术图片

 

  那不如直接上例题?(越来越懒)

 技术图片

  区间旋转怎么做啊??

  我会splay,但是好像还不够,我还会打标记!

  考虑每次区间旋转的时候,我们可以找到区间l的前驱,把他旋转到根节点,这样根节点和根节点的右子树是[1,l-1],左子树是[l,n],然后我们把r的后继旋转到根节点的右儿子,这样根节点的右儿子和右儿子的子树就是[l+1,n],根节点的右儿子的左子树即为区间[l,r],打标记走人!

  输出就简单了,dfs(root),对于当前节点x,如果有标记就把标记下传并交换左右子树,然后dfs(左儿子),然后输出x,然后dfs(右儿子).

  为什么复杂度能够保证呢?好像要用到势函数或摊还分析,告辞.

平衡二叉树之splay p1998

标签:image   简单   center   play   .net   时间   blog   style   text   

原文地址:https://www.cnblogs.com/qywyt/p/10363177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!