题目:在红黑树的基础上实现区间树的创建,左旋,右旋,插入和查找
算法思想:
区间树介绍:
区间树是在红黑树基础上进行扩展得到的支持以区间为元素的动态集合的操作,其中每个节点的关键值是区间的左端点。区间[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