红黑树

介绍

    红黑树是一种稳定的树,前面说到二叉查找树有些缺点就是,如果是链式插入的话,就会造成树的高度和随机插入的高度相差很大的问题,导致效率低下。而红黑树解决了这个问题,他保证了以下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 

你可能感兴趣的:(数据结构与算法,二叉树,数据结构,算法,java,python)