Treap 基本ADT
来源:互联网 发布:java nexttoken 编辑:程序博客网 时间:2024/05/18 02:05
因为计算几何的PA要求BBST和优先队列,就百度学习了一下Treap的用法。。。
这里要安利一下byvoid大牛的这篇论文,讲的非常好!
http://www.docin.com/p-456402313.html?qq-pf-to=pcqq.c2c
接下来就是把他的代码抄过来,然后一些小错误改一下。。。
struct Treap_Node{ Treap_Node *lchild,*rchild; int data,fix; Treap_Node(int x=0):data(x),lchild(NULL),rchild(NULL) { fix=rand(); }};void Treap_left_rotate(Treap_Node* &a){ Treap_Node* b=a->rchild; a->rchild=b->lchild; b->lchild=a; a=b;}void Treap_right_rotate(Treap_Node* &a){ Treap_Node* b=a->lchild; a->lchild=b->rchild; b->rchild=a; a=b;}void Inorder_traverse(Treap_Node *p){ if(!p) return ; Inorder_traverse(p->lchild); printf("%d\n",p->data); Inorder_traverse(p->rchild);}Treap_Node* Treap_search(Treap_Node* p,int v){ if(p==NULL) return NULL; if(p->data==v) return p; else if(p->data<=v) return Treap_search(p->lchild,v); else return Treap_search(p->rchild,v);}Treap_Node* Treap_insert(Treap_Node* &p,int v){ if(p==NULL)//we find the position and we do the insertion { p=new Treap_Node(v); return p; } else if(v<=p->data) { Treap_insert(p->lchild,v); if(p->lchild->fix<p->fix) Treap_right_rotate(p); } else { Treap_insert(p->rchild,v); if(p->rchild->fix<p->fix) Treap_left_rotate(p); }}bool Treap_delete(Treap_Node* &p,int v)//delete the Node with data v in subtree p//return success or failure{ if(p==NULL) return false; if(v==p->data)//we shall delete p { if(p->lchild==NULL||p->rchild==NULL)//leaf or only having a child { Treap_Node* temp=p;//for backup if(p->rchild==NULL) p=p->lchild; else p=p->rchild; delete temp; return true; } else//having both lchild and rchild { if(p->lchild->fix<p->rchild->fix)//rignt rotate { Treap_right_rotate(p); Treap_delete(p->rchild,v);//go into the rchild subtree to do deletation } else { Treap_left_rotate(p); Treap_delete(p->lchild,v); } } } else if(v<=p->data) Treap_delete(p->lchild,v); else Treap_delete(p->rchild,v);}void Treap_destroy(Treap_Node* p){ if(p->lchild) Treap_destroy(p->lchild); if(p->rchild) Treap_destroy(p->rchild); delete p;}
0 0
- Treap 基本ADT
- Treap 基本操作
- Treap学习基本入门
- Treap树的基本操作
- Size Balance Tree和Treap的ADT接口和实现
- Treap
- Treap
- Treap
- Treap
- Treap
- Treap
- treap
- Treap
- treap
- Treap
- treap
- Treap
- Treap
- 网易2016实习研发工程师编程题——寻找第K大
- android app性能优化大汇总
- CSS中一些常用的字体
- Android逆向学习笔记---逆向腾讯2016游戏安全挑战赛Tencent2016A.apk
- LightOj1282(阶乘前三位和后三位)
- Treap 基本ADT
- android studio导入不同版本的android项目
- 第一份工作总结
- 从“-2”告警跟踪到的问题
- 二分查找
- android app性能优化大汇总(UI渲染性能优化)
- 对于php、mysql优化、angularjs的一些小感悟
- leetcode-504-Diameter of Binary Tree
- poj 2142 数论 扩展欧几里得