平衡二叉树之splay p1998

Posted qywyt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了平衡二叉树之splay p1998相关的知识,希望对你有一定的参考价值。

  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的主要内容,如果未能解决你的问题,请参考以下文章

平衡二叉树,AVL树之图解篇

数据结构树之平衡二叉树

二叉树之AVL树的平衡实现(递归与非递归)

平衡二叉树的删除

[转]数据结构中各种树

数据结构中的各种树