在红黑树的基础上实现区间树的创建,左旋,右旋,插入和查找

本文介绍了如何在红黑树的基础上实现区间树,以支持区间元素的快速查找和插入操作。区间树每个节点代表一个区间,通过max属性记录子树最大值,保证操作效率为O(logn)。文章详细阐述了数据结构的设计,并提供了相关代码实现。
摘要由CSDN通过智能技术生成


题目:在红黑树的基础上实现区间树的创建,左旋,右旋,插入和查找

算法思想:

区间树介绍:      

区间树是在红黑树基础上进行扩展得到的支持以区间为元素的动态集合的操作,其中每个节点的关键值是区间的左端点。区间[low,high]表示成一个对象i,low表示区间的低点,high表示区间的高点。通过建立这种特定的结构,可使区间的元素的查找和插入都可以在O(lgn)的时间内完成。

相比于红黑树的数据结构,区间树还增加了一个max[x],即以x为根的子树中所有区间的断点的最大值:

max[x]=max(high[int[x]], max[left[x]],max[right[x]]

       以红黑树为基础,对x∈T,x包含区间int[x]的信息(低点和高点),key=low[int[x]]。

设计区间树的数据结构如下

typedef enum Color{red,black}Color;

typedef structinterval{//区间

    int low;

    int high;

}interval;

 struct rbnode{

    int key;//区间的低端点

    struct rbnode *left;

    struct rbnode *right;

    struct rbnode *p;

    int max;//以当前结点为子树的所有区间的端点的最大值

    interval inte;

    Color color;

}RBnode;

typedef structrbnode *RBTree;

代码如下:

#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <stack>
#include<time.h>
#include <stdio.h>
//#deifine NUM 10
int NUM = 1000;
using namespace std;
typedef enum Color{red,black} Color;
typedef struct interval{//区间
    int low;
    int high;
}interval;
 struct rbnode{
    int key;//区间的低端点
    struct rbnode *left;
    struct rbnode *right;
    struct rbnode *p;
    int max;//以当前结点为子树的所有区间的端点的最大值
    interval inte;
    Color color;
}RBnode;
typedef struct rbnode *RBTree;
RBTree nil,root;
int Overlap(interval a,interval b);//两个区间是否重叠
void InitLeafNode();//初始化叶子结点
int GetMax(RBTree T);
int Max(int a,int b,int c);
RBTree C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值