首页 > 编程语言 > 详细

【算法】数据结构

时间:2017-03-25 17:21:50      阅读:181      评论:0      收藏:0      [点我收藏+]

【treap】

treap:http://dongxicheng.org/structure/treap/(似乎文中理解的旋转方向不太一样,我一般认为左旋即把右节点旋上去)

因为第一次理解旋转,详细写一下树的旋转过程,下面以右旋为例。

技术分享

void rturn(int &t)

{
     int k=tree[t].l;
     tree[t].l=tree[k].r;//让旋转后的右节点t承接原左节点k的右子树作为新左子树,同时解除k作为左节点对于t的隶属关系。
     tree[k].r=t;//将k的右节点置为t(原k的右节点已送出)。
     t=k;//赋新根便于返回。
}
右旋就是将左节点旋上去作为新根。
原根t,新根k(原根t的左节点)
本质就是原根t的左节点解放出k并更新为k的右节点。
解放出来的k的右节点更新为原根t,k本身不再隶属其它节点而是作为新根。
真正动到的节点:t的左节点(解放出k),k的右节点(存放t),而原k的右节点变成了t的左节点(替换过去)。
---
由于插入是从根进入的,应该可以保证左子树所有值均小于根节点,右子树所有值均大于根节点。
其它的上面给的博客链接已经说得很清楚了,可以结合代码去看。
 

【算法】数据结构

原文:http://www.cnblogs.com/onioncyc/p/6617685.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!