#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树及相关算法的更多相关文章

  1. poj 2761 Feed the dogs (treap树)

    /************************************************************* 题目: Feed the dogs(poj 2761) 链接: http: ...

  2. Treap树

    Treap树算是一种简单的优化策略,这名字大家也能猜到,树和堆的合体,其实原理比较简单,在树中维护一个"优先级“,”优先级“ 采用随机数的方法,但是”优先级“必须满足根堆的性质,当然是“大根 ...

  3. 二叉树-你必须要懂!(二叉树相关算法实现-iOS)

    这几天详细了解了下二叉树的相关算法,原因是看了唐boy的一篇博客(你会翻转二叉树吗?),还有一篇关于百度的校园招聘面试经历,深刻体会到二叉树的重要性.于是乎,从网上收集并整理了一些关于二叉树的资料,及 ...

  4. <转>ML 相关算法参考

    转自 国内外网站如果你想搜索比较新颖的机器学习资料或是文章,可以到以下网站中搜索,里面不仅包括了机器学习的内容,还有许多其它相关领域内容,如数据科学和云计算等.InfoWord:http://www. ...

  5. Treap树理解

    title: Treap树理解 comments: true date: 2016-10-06 07:57:37 categories: 算法 tags: Treap树 树 Treap树理解 简介 随 ...

  6. 【STL学习】堆相关算法详解与C++编程实现(Heap)

    转自:https://blog.csdn.net/xiajun07061225/article/details/8553808 堆简介   堆并不是STL的组件,但是经常充当着底层实现结构.比如优先级 ...

  7. bzoj2141 树状数组套Treap树

    题目大意是在能够改变两个数的位置的情况下计算逆序对数 这因为是动态记录逆序对 本来单纯逆序对只要用树状数组计算即可,但这里因为更新,所以利用TReap树的删点和增加点来进行更新 大致是把每个树状数组所 ...

  8. treap树模板

    ///treap树模板 typedef struct Node ///节点的结构体 { Node *l,*r; int val,pri; ///节点的值和优先级 int sz; ///节点子树的节点数 ...

  9. treap树---营业额统计

    台州学院  2924 描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况.Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额 ...

随机推荐

  1. python 第三方库 chardet

    chardet是一个非常优秀的编码识别模块.chardet 是python的第三方库,需要下载和安装,放在python安装根目录\Lib\site-packages下面 import chardet ...

  2. unity3d基础01

    Unity3d 五大视图: 1 Scene:存放hierarchy中创建的游戏对象,但实际只能看到一部分 *Scene浏览: ①右键进入“飞行模式”,方便查看整个场景 ②选中摄像机,按ALT进入浏览的 ...

  3. spring六种种依赖注入方式

    平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程 ...

  4. hdoj-2025a

    #include "stdio.h"#include "string.h"void compare(int n,char s[],char &k);vo ...

  5. RFIDler:一款定义RFID的读、写、仿真器的开源软件

    很多类似于RFID这样的技术看起来都很神秘,实际上他是依赖于很多物理学原理的,比如”电磁感应原理”.是的,这些现象产生的各种信号足以令人发狂,看完这些模拟模拟信号后,我忽然发现二进制信息多么干净美丽. ...

  6. BZOJ 2393 Cirno的完美算数教室

    就是爆搜嘛. 先从大到小排个序能减去dfs树上很大的一部分.这个技巧要掌握. #include<iostream> #include<cstdio> #include<c ...

  7. CPP,MATLAB实现牛顿插值

    牛顿插值法的原理,在维基百科上不太全面,具体可以参考这篇文章.同样贴出,楼主作为初学者认为好理解的代码. function p=Newton1(x1,y,x2) %p为多项式估计出的插值 syms x ...

  8. Android 中如何获取 H5 保存在 LocalStorage 的数据

    主要分三步: 写个接口,接收 Js 回调 添加到 WebView 主动调用 Js 获取 比如我要获取保存在 LocalStorage 中的 userKey 字段: 1.写个接口,接收 Js 回调 pu ...

  9. WPF Step By Step -基础知识介绍

    回顾 上一篇我们介绍了WPF基本的知识.并且介绍了WPF与winform传统的cs桌面应用编程模式上的变化,这篇,我们将会对WPF的一些基础的知识做一个简单的介绍,关于这些基础知识更深入的应用则在后续 ...

  10. 转:Highcharts图表控件的使用

    摘要 Highcharts图表控件是目前使用最为广泛的图表控件.本文将从零开始逐步为你介绍Highcharts图表控件.通过本文,你将学会如何配置Highcharts以及动态生成Highchart图表 ...