treap树及相关算法
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct treenode
{
int key;
int priority;
int flag;
treenode* parent;
treenode* lchild;
treenode* rchild; }node,*pnode;
pnode treeroot=NULL;
void adjusttree(pnode p)
{ if(p->parent==NULL)return;
if(p->priority>=p->parent->priority)return;
if(p->flag==)//p lie in the left subtree, rotate right
{
pnode prt=p->parent,rchild=p->rchild;
if(p->parent->flag==)
{
prt->lchild=rchild;
if(rchild)rchild->parent=prt;
if(rchild)rchild->flag=;
p->rchild=prt;
prt->parent=p;
prt->flag=;
treeroot=p;
p->parent=NULL;
p->flag=;
return;
}
else if(p->parent->flag==)
{
pnode grdp=prt->parent;
prt->lchild=rchild;
if(rchild)rchild->parent=prt;
if(rchild)rchild->flag=;
p->rchild=prt;
prt->parent=p;
prt->flag=;
grdp->lchild=p;
p->parent=grdp;
p->flag=;
adjusttree(p);
}
else if(p->parent->flag==)
{
pnode grdp=prt->parent;
prt->lchild=rchild;
if(rchild)
rchild->parent=prt;
if(rchild)
rchild->flag=;
p->rchild=prt;
prt->parent=p;
prt->flag=;
grdp->rchild=p;
p->parent=grdp;
p->flag=;
adjusttree(p);
} }
else if(p->flag==)//p lie in the right tree, rotate left
{
pnode prt=p->parent,lchild=p->lchild;
if(p->parent->flag==)
{
prt->rchild=lchild;
if(lchild)lchild->parent=prt;
if(lchild)lchild->flag=;
p->lchild=prt;
prt->parent=p;
prt->flag=;
treeroot=p;
p->parent=NULL;
p->flag=;
return; }
else if(p->parent->flag==)
{
pnode grdp=prt->parent;
prt->rchild=lchild;
if(lchild)lchild->parent=prt;
if(lchild)lchild->flag=;
p->lchild=prt;
prt->parent=p;
prt->flag=;
grdp->lchild=p;
p->parent=grdp;
p->flag=;
adjusttree(p);
}
else if(p->parent->flag==)
{
pnode grdp=prt->parent;
prt->rchild=lchild;
if(lchild)lchild->parent=prt;
if(lchild)lchild->flag=;
p->lchild=prt;
prt->parent=p;
prt->flag=;
grdp->rchild=p;
p->parent=grdp;
p->flag=;
adjusttree(p);
} } }
void insert_node(pnode root,pnode p,pnode parent,int flag)
{
if(root==NULL)
{
p->flag=flag;
p->parent=parent;
if(flag==)parent->lchild=p;
if(flag==)parent->rchild=p;
if(p->priority<p->parent->priority)adjusttree(p);
return;
}
if(root->key>=p->key)insert_node(root->lchild,p,root,);
else insert_node(root->rchild,p,root,);
}
pnode createnode(int key,int priority)
{
pnode tmp;
tmp=(pnode)malloc(sizeof(node));
tmp->flag=;
tmp->parent=NULL;
tmp->rchild=NULL;
tmp->lchild=NULL;
tmp->key=key;
tmp->priority=priority;
return tmp;
}
void dsptree(pnode p)
{
if(p)dsptree(p->lchild);
if(p){printf("#%dsubtree key=%d\n",p->flag,p->key);}
if(p)dsptree(p->rchild);
}
int main()
{
treeroot=createnode(,);
pnode n1=createnode(,);
pnode n2=createnode(,);
pnode n3=createnode(,);
pnode n4=createnode(,);
insert_node(treeroot,n1,,);
insert_node(treeroot,n2,,);
insert_node(treeroot,n3,,);
insert_node(treeroot,n4,,);
dsptree(treeroot);
system("pause");
return ;
}
treap树及相关算法的更多相关文章
- poj 2761 Feed the dogs (treap树)
/************************************************************* 题目: Feed the dogs(poj 2761) 链接: http: ...
- Treap树
Treap树算是一种简单的优化策略,这名字大家也能猜到,树和堆的合体,其实原理比较简单,在树中维护一个"优先级“,”优先级“ 采用随机数的方法,但是”优先级“必须满足根堆的性质,当然是“大根 ...
- 二叉树-你必须要懂!(二叉树相关算法实现-iOS)
这几天详细了解了下二叉树的相关算法,原因是看了唐boy的一篇博客(你会翻转二叉树吗?),还有一篇关于百度的校园招聘面试经历,深刻体会到二叉树的重要性.于是乎,从网上收集并整理了一些关于二叉树的资料,及 ...
- <转>ML 相关算法参考
转自 国内外网站如果你想搜索比较新颖的机器学习资料或是文章,可以到以下网站中搜索,里面不仅包括了机器学习的内容,还有许多其它相关领域内容,如数据科学和云计算等.InfoWord:http://www. ...
- Treap树理解
title: Treap树理解 comments: true date: 2016-10-06 07:57:37 categories: 算法 tags: Treap树 树 Treap树理解 简介 随 ...
- 【STL学习】堆相关算法详解与C++编程实现(Heap)
转自:https://blog.csdn.net/xiajun07061225/article/details/8553808 堆简介 堆并不是STL的组件,但是经常充当着底层实现结构.比如优先级 ...
- bzoj2141 树状数组套Treap树
题目大意是在能够改变两个数的位置的情况下计算逆序对数 这因为是动态记录逆序对 本来单纯逆序对只要用树状数组计算即可,但这里因为更新,所以利用TReap树的删点和增加点来进行更新 大致是把每个树状数组所 ...
- treap树模板
///treap树模板 typedef struct Node ///节点的结构体 { Node *l,*r; int val,pri; ///节点的值和优先级 int sz; ///节点子树的节点数 ...
- treap树---营业额统计
台州学院 2924 描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况.Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额 ...
随机推荐
- 《day18_String练习_基本类型包装类_集合入门》
package cn.itcast.api.String.test; public class StringTest_1 { public static void main(String[] args ...
- hdu2196 树的直径 + bfs
//Accepted 740 KB 15 ms //树的直径 //距离一个顶点最远的点一定是树的直径的一个端点 #include <cstdio> #include <cstring ...
- operation not possible due to RF-kill
使用mdk3时出现这个问题operation not possible due to RF-kill 就是输入第一条命令 后出现 operation not possible due to RF-ki ...
- AppCan相关网站
AppCan文档中心: http://doc.appcan.cn/#!/guide/handbook AppCan官网: http://www.appcan.cn/index.html
- MATLAB简单实现ID3
再看<MATLAB数据分析与挖掘实战>,简单总结下今天看到的经典的决策树算法——ID3. ID3:在决策树的各级节点上,使用信息增益的方法作为属性的选择标准,来帮助确定生成每个节点时所应采 ...
- java作业3
Java字段初始化的规律: 静态初始化生成实例之后(就是new之后)变成你赋给它的值 ,先执行静态初始化,如果没有实例化,按照初始化块和构造方法在程序中出现的顺序执行. 当多个类之间有继承关系时,创建 ...
- Oracle常用SQL语句
--2.查看表结构 desc wx_monitor_excption; --3.从表中查询数据 select * from wx_monitor_excption; --7.双引号保持原来的格式 se ...
- 第二个Sprint冲刺第五天
讨论地点:qq 讨论成员:邵家文.李新.朱浩龙.陈俊金 今天工作:测试了数据的传输,总共用了三个方案,其中两个失败了,一个成功了. 开发感悟:今天吃完饭就赶着发博客了,最近有几个朋友令我特别的烦,翻脸 ...
- JS的强大
JS很强大,对于网页设计者来说,会用JS真的很重要. 学好我的linux,和数据结构.
- 决策树模型 ID3/C4.5/CART算法比较
决策树模型在监督学习中非常常见,可用于分类(二分类.多分类)和回归.虽然将多棵弱决策树的Bagging.Random Forest.Boosting等tree ensembel 模型更为常见,但是“完 ...