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