mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-05-17 19:41:36 +08:00
单步跟进,确认rbt插入没问题了
This commit is contained in:
parent
454147ec81
commit
8d2e254c3e
@ -126,7 +126,86 @@ void test_avltree_num(void)
|
||||
tree_free(tree);
|
||||
}
|
||||
|
||||
bool tree_rb_check(struct _tree* self, struct _tree_node* root)
|
||||
{
|
||||
assert(self != NULL);
|
||||
if(root == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
struct _tree_node* node = root;
|
||||
queue_t queue = queue_new();
|
||||
queue_init(queue, sizeof(struct _tree_node*));
|
||||
|
||||
if(node != NULL)
|
||||
{
|
||||
queue->push(queue, &node);
|
||||
while(!queue->empty(queue))
|
||||
{
|
||||
queue->pop(queue, &node);
|
||||
if(!self->_right_priority)
|
||||
{
|
||||
if(node->left != NULL)
|
||||
{
|
||||
queue->push(queue, &node->left);
|
||||
}
|
||||
if(node->right != NULL)
|
||||
{
|
||||
queue->push(queue, &node->right);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(node->right != NULL)
|
||||
{
|
||||
queue->push(queue, &node->right);
|
||||
}
|
||||
if(node->left != NULL)
|
||||
{
|
||||
queue->push(queue, &node->left);
|
||||
}
|
||||
}
|
||||
|
||||
if(node->color == RBT_RED)
|
||||
{
|
||||
if(node->parent != NULL)
|
||||
{
|
||||
if(node->parent->color == RBT_RED)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(node->left != NULL)
|
||||
{
|
||||
if(node->left->color == RBT_RED)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if(node->right != NULL)
|
||||
{
|
||||
if(node->right->color == RBT_RED)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(node->parent == NULL)
|
||||
{
|
||||
if(self->_root != node || node->color != RBT_BLACK)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
queue_free(queue);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief
|
||||
@ -161,6 +240,14 @@ void test_rbtree_num(void)
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
printf("----- rb_check -----\n");
|
||||
bool ret = tree_rb_check(tree, tree->_root);
|
||||
if(ret != true)
|
||||
{
|
||||
printf("----- rb_check_error -----\n");
|
||||
return;
|
||||
}
|
||||
|
||||
printf("----- max -----\n");
|
||||
tree->max(tree, &temp);
|
||||
tree->print_obj(&temp);
|
||||
|
Loading…
Reference in New Issue
Block a user