示例#1
0
Status RBTree_createNote(pt_RBRoot root,KeyType itemID,char *name,int money){
    RBTree newNode;
    if((RBTree_search(root,itemID))) return ERROR;
    if(!(RBTree_createNode_realize(newNode,NULL,NULL,NULL,itemID,name,money,RED))) return ERROR;
    if(!(RBTree_insert(root,newNode))) return ERROR;
    return OK;
}
示例#2
0
//==================================================================
//					测试红黑树
//==================================================================
void test_redblacktree_delete(RBTree* tree, int key)
{
	RBNode* node = RBTree_search(*tree, key);
	assert(node != RBTree_nil());

	printf("\n删除节点 %d \n", node->key);
	
	node = RBTree_delete(tree, node);
	free(node);
	
	RBTree_print(*tree);
}
示例#3
0
void test_redblacktree()
{
	const int length = 14;
	int array[length] = {
		2, 3, 4, 6, 7, 11, 9, 18, 12, 14, 19, 17, 22, 20
	};

	int i;
	RBTree tree = RBTree_nil();
	RBNode* node = NULL;

	// 插入节点生成树
	for (i = 0; i < length; i++) {
		node = (RBNode*)malloc(sizeof(RBNode));
		node->key = array[i];
		node->color = RB_Red;
		node->parent = RBTree_nil();
		node->leftChild = RBTree_nil();
		node->rightChild = RBTree_nil();

		RBTree_insert(&tree, node);	
	}

	RBTree_print(tree);

	// 插入测试
	node = (RBNode*)malloc(sizeof(RBNode));
	node->key = 21;

	printf("\n插入节点 %d\n", node->key);

	RBTree_insert(&tree, node);
	RBTree_print(tree);

	// 查找测试
	i = 6;
	node = RBTree_search(tree, i);

	if (node != RBTree_nil()) {
		printf("\n在红黑树中找到节点 %d\n", node->key);
	}
	else {
		printf("\n在红黑树中找不到节点 %d\n", i);
	}

	// 删除测试
	// 
	i = 4;// 取值 1, 2, 3, 4,分别对应 case 1, 2, 3, 4

	switch (i)
	{
	case 1:	// 兄弟为红色
		test_redblacktree_delete(&tree, 3);
		break;

	case 2:	// 兄弟为黑色,且兄弟的两孩子均为黑色
		test_redblacktree_delete(&tree, 12);
		break;

	case 3:	// 兄弟为黑色,且兄弟的左孩子为红色,右孩子均为黑色
		test_redblacktree_delete(&tree, 19);
		break;

	case 4:	// 兄弟为黑色,且兄弟的右孩子为红色
		test_redblacktree_delete(&tree, 9);
		break;
	}

	test_redblacktree_delete(&tree, 21);

	// 删除树
	for (i = 0; i < length; i++) {
		node = RBTree_search(tree, array[i]);

		if (node != RBTree_nil()) {
			printf("删除 %d\n", node->key);
			node = RBTree_delete(&tree, node);
			free(node);
		}
	}

	assert(tree == RBTree_nil());
}