Treap平衡树
来源:互联网 发布:linux 没有home目录 编辑:程序博客网 时间:2024/06/01 08:18
转自:http://blog.csdn.net/sxy_cnyali/article/details/50412629
程序:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; const int dmax=101000; struct node{ int x,w; struct node *f,*l,*r; node(){ f=l=r=NULL; x=w=0; } }; struct node *h,*p,*q; void right(struct node *x,struct node *y){ if (y==h) h=x; y->l=x->r; if (x->r!=NULL) x->r->f=y; x->f=y->f; if (y->f!=NULL){ if (y->f->l==y) y->f->l=x; else y->f->r=x; } y->f=x; x->r=y; } void left(struct node *x,struct node *y){ if (y==h) h=x; y->r=x->l; if (x->l!=NULL) x->l->f=y; x->f=y->f; if (y->f!=NULL){ if (y->f->l==y) y->f->l=x; else y->f->r=x; } y->f=x; x->l=y; } void insert(struct node *t,int k){ if (k<t->x){ if (t->l==NULL){ p=new node; p->x=k; p->w=(int)rand()*1.0/32767*2147483647; p->f=t; t->l=p; if (p->f!=NULL) while (p->w<p->f->w){ if (p==p->f->l) right(p,p->f); else left(p,p->f); if (p->f==NULL) break; } }else insert(t->l,k); }else{ if (t->r==NULL){ p=new node; p->x=k; p->w=(int)rand()*1.0/32767*2147483647; p->f=t; t->r=p; if (p->f!=NULL) while (p->w<p->f->w){ if (p==p->f->l) right(p,p->f); else left(p,p->f); if (p->f==NULL) break; } }else insert(t->r,k); } } void out(struct node *t){ if (t->l!=NULL) out(t->l); printf("%d ",t->x); if (t->r!=NULL) out(t->r); } int main(){ srand(18213); int i,j,k,m,n; scanf("%d",&n); h=new node; scanf("%d",&k); h->x=k; h->w=(int)rand()*1.0/32767*2147483647; for (i=2;i<=n;i++){ scanf("%d",&k); insert(h,k); } out(h); return 0; }
1 0
- TREAP平衡树代码
- Treap平衡树
- Treap平衡树
- Treap平衡树
- Treap平衡树
- TREAP平衡树
- 平衡树Treap模版
- 【平衡树】Treap
- 平衡树Treap
- 平衡树之treap
- 普通平衡树 treap
- 【学习】Treap平衡树
- 数据结构 平衡树treap
- 平衡树之Treap
- Treap-普通平衡树
- 平衡树之treap
- 浅谈 平衡树-treap
- [平衡树模板]Treap
- hdoj--1083--Courses(最大匹配)
- 用java快速批量insert数据
- iOS App转让
- Mac OS X Git安装教程
- Java 基于 TCP/IP 实现 Socket中的多客户端通信
- Treap平衡树
- 安卓EditView控件回车按钮的监听事件,解决界面onkey无效
- HTML -笔记01-列表使用初识
- POJ2349 (prim)
- 从头认识Spring-1.7 怎样通过属性注入Bean?(1)-怎样通过属性向对象注入值?
- 杭电 hdu 2089 不要62【数位dp】【入门】
- fidder 拦截http 重新发起请求
- PATH环境变量
- epoll详解和使用