没有合适的资源?快使用搜索试试~ 我知道了~
根据随机生成的数构造红黑树的代码(C++)
需积分: 11 11 下载量 150 浏览量
2011-04-19
20:50:22
上传
评论
收藏 7KB TXT 举报
温馨提示
试读
11页
利用C++实现了根据随机生成的数构造红黑树
资源推荐
资源详情
资源评论
由于红黑树中的元素必须各不相同,定义了一个时间复杂度仅为O(n)的随机数产生函数:
void Random(int *A, int max, int length);
该函数能返回一个长度为length,元素随机分布在0~max之间的数组A。
根据实验主要功能―插入,定义了插入函数
void rbInsert(RBT* *root, RBT* pZ);
而插入函数需要调整红黑树结构,定义红黑树调整函数:
void rbFixUp(RBT **root, RBT *pZ);//插入后的调整
在调整函数中又需要调用左旋操作和右旋操作:
void leftRotate(RBT* *root, RBT *pX); //左旋操作
void rightRotate(RBT** root, RBT *pX); //右旋操作
为了显示红黑树而定义了先序遍历的红黑树打印函数:
void treePrint(RBT **root); //打印一棵树,先序遍历
打印红黑树的过程中需要调用对每一个结点的打印函数:
void rbPrint(RBT* pX); //打印一个结点
代码如下:
#include <iostream>
#include <stdio.h>
#include <time.h>
using namespace std;
#define red 0
#define black 1
#define SIZE 10 //待插入的元素个数
#define MAX 100 //待插入元素的范围0~MAX
typedef struct RB
{
void Random(int *A, int max, int length);
该函数能返回一个长度为length,元素随机分布在0~max之间的数组A。
根据实验主要功能―插入,定义了插入函数
void rbInsert(RBT* *root, RBT* pZ);
而插入函数需要调整红黑树结构,定义红黑树调整函数:
void rbFixUp(RBT **root, RBT *pZ);//插入后的调整
在调整函数中又需要调用左旋操作和右旋操作:
void leftRotate(RBT* *root, RBT *pX); //左旋操作
void rightRotate(RBT** root, RBT *pX); //右旋操作
为了显示红黑树而定义了先序遍历的红黑树打印函数:
void treePrint(RBT **root); //打印一棵树,先序遍历
打印红黑树的过程中需要调用对每一个结点的打印函数:
void rbPrint(RBT* pX); //打印一个结点
代码如下:
#include <iostream>
#include <stdio.h>
#include <time.h>
using namespace std;
#define red 0
#define black 1
#define SIZE 10 //待插入的元素个数
#define MAX 100 //待插入元素的范围0~MAX
typedef struct RB
{
int key; //关键字
int color; //颜色
struct RB *ptParent; //指向父结点的指针
struct RB *ptLeft; //指向左孩子的指针
struct RB *ptRight; //指向右防子的指针
}RBT; //定义结构体RBT来表示红黑树一个结点
void leftRotate(RBT* *root, RBT *pX); //左旋操作
void rbFixUp(RBT **root, RBT *pZ);//插入后的调整
void rightRotate(RBT** root, RBT *pX); //右旋操作
void rbInsert(RBT* *root, RBT* pZ); //插入操作
void rbPrint(RBT* pX); //打印一个结点
void treePrint(RBT **root); //打印一棵树,先序遍历
void Random(int *A, int max, int length);//产生一个长度为length数组,
//数组元素随机分布在0~max间,且不重复,
//时间复杂度为O(max)
int main()
{
RBT **root; //root指向根结点
root = (RBT**)malloc(sizeof(RBT*));
*root = NULL;//初始时树为空
int *A; //A用来存放待入元素
A = (int*)malloc(sizeof(int)*SIZE);
int i;
/* for(i=0; i<SIZE; i++)
{
int color; //颜色
struct RB *ptParent; //指向父结点的指针
struct RB *ptLeft; //指向左孩子的指针
struct RB *ptRight; //指向右防子的指针
}RBT; //定义结构体RBT来表示红黑树一个结点
void leftRotate(RBT* *root, RBT *pX); //左旋操作
void rbFixUp(RBT **root, RBT *pZ);//插入后的调整
void rightRotate(RBT** root, RBT *pX); //右旋操作
void rbInsert(RBT* *root, RBT* pZ); //插入操作
void rbPrint(RBT* pX); //打印一个结点
void treePrint(RBT **root); //打印一棵树,先序遍历
void Random(int *A, int max, int length);//产生一个长度为length数组,
//数组元素随机分布在0~max间,且不重复,
//时间复杂度为O(max)
int main()
{
RBT **root; //root指向根结点
root = (RBT**)malloc(sizeof(RBT*));
*root = NULL;//初始时树为空
int *A; //A用来存放待入元素
A = (int*)malloc(sizeof(int)*SIZE);
int i;
/* for(i=0; i<SIZE; i++)
{
剩余10页未读,继续阅读
资源评论
nankaiit
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功