介绍
红黑树是一种稳定的树,前面说到二叉查找树有些缺点就是,如果是链式插入的话,就会造成树的高度和随机插入的高度相差很大的问题,导致效率低下。而红黑树解决了这个问题,他保证了以下5个特性:1.结点颜色非红即黑。2.根结点颜色一定是黑色的。3.红色结点的孩子颜色一定是黑色的。4.叶子结点的颜色一定是黑色的。5.从任何一结点到叶子结点,中间的黑色结点数量一致。
实现
定义结构信息如下:
typedef enum _COLOR
{
RED,
BLACK
}COLOR;
typedef struct _Node
{
char color;
int data;
_Node* parent;
_Node* left;
_Node* right;
}Node;
typedef struct _Tree
{
Node* root;
}Tree;
相对于二叉树,这里定义多了一个颜色的定义,以及多了一个颜色的枚举。结构定义完了以后,瑞定义一颗全局的树:
static Node* g_sentry;
static Tree* g_tree;
g_sentry是用来当哨兵的,简化代码。初始化树:
void initNode(Node* node)
{
node->parent = g_sentry;
node->left = g_sentry;
node->right = g_sentry;
}
void init()
{
g_sentry