mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-07-03 23:56:54 +08:00
注释掉非必要代码,实测原来旧工程的删除操作是正确的。我现在这个删除3的时候,没有合适的rebalance
This commit is contained in:
parent
59e84f7131
commit
3a2357e2a8
61
src/tree.c
61
src/tree.c
@ -1737,19 +1737,19 @@ static bool tree_avl_delete_single_child(struct _tree* self, struct _tree_node*
|
|||||||
{
|
{
|
||||||
if(node->left != NULL)
|
if(node->left != NULL)
|
||||||
{
|
{
|
||||||
node->left->parent = NULL; // step1
|
node->left->parent = node->parent; // step1 : NULL for root
|
||||||
self->_root = node->left; // step2
|
self->_root = node->left; // step2
|
||||||
|
|
||||||
// options
|
// options
|
||||||
node->left = NULL;
|
// node->left = NULL;
|
||||||
}
|
}
|
||||||
else if(node->right != NULL)
|
else if(node->right != NULL)
|
||||||
{
|
{
|
||||||
node->right->parent = NULL; // step1
|
node->right->parent = node->parent; // step1 : NULL for root
|
||||||
self->_root = node->right; // step2
|
self->_root = node->right; // step2
|
||||||
|
|
||||||
// options
|
// options
|
||||||
node->right = NULL;
|
// node->right = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1764,28 +1764,28 @@ static bool tree_avl_delete_single_child(struct _tree* self, struct _tree_node*
|
|||||||
{
|
{
|
||||||
node->left->parent = node->parent; // step1
|
node->left->parent = node->parent; // step1
|
||||||
node->parent->left = node->left; // step2
|
node->parent->left = node->left; // step2
|
||||||
node->left->right = node->right; // step3 : NULL for singly child
|
|
||||||
|
|
||||||
// options
|
// node->left->right = node->right; // step3 : NULL for singly child
|
||||||
node->left = NULL;
|
// // options
|
||||||
node->parent = NULL;
|
// node->left = NULL;
|
||||||
|
// node->parent = NULL;
|
||||||
}
|
}
|
||||||
else if(node->right != NULL)
|
else if(node->right != NULL)
|
||||||
{
|
{
|
||||||
node->right->parent = node->parent; // step1
|
node->right->parent = node->parent; // step1
|
||||||
node->parent->left = node->right; // step2
|
node->parent->left = node->right; // step2
|
||||||
node->right->left = node->left; // step3 : NULL for singly child
|
|
||||||
|
|
||||||
// options
|
// node->right->left = node->left; // step3 : NULL for singly child
|
||||||
node->right = NULL;
|
// // options
|
||||||
node->parent = NULL;
|
// node->right = NULL;
|
||||||
|
// node->parent = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
node->parent->left = NULL;
|
node->parent->left = NULL;
|
||||||
|
|
||||||
// options
|
// options
|
||||||
node->parent = NULL;
|
// node->parent = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(node->parent->right == node)
|
else if(node->parent->right == node)
|
||||||
@ -1794,28 +1794,28 @@ static bool tree_avl_delete_single_child(struct _tree* self, struct _tree_node*
|
|||||||
{
|
{
|
||||||
node->left->parent = node->parent; // step1
|
node->left->parent = node->parent; // step1
|
||||||
node->parent->right = node->left; // step2
|
node->parent->right = node->left; // step2
|
||||||
node->left->right = node->right; // step3 : NULL for singly child
|
|
||||||
|
|
||||||
// options
|
// node->left->right = node->right; // step3 : NULL for singly child
|
||||||
node->left = NULL;
|
// // options
|
||||||
node->parent = NULL;
|
// node->left = NULL;
|
||||||
|
// node->parent = NULL;
|
||||||
}
|
}
|
||||||
else if(node->right != NULL)
|
else if(node->right != NULL)
|
||||||
{
|
{
|
||||||
node->right->parent = node->parent; // step1
|
node->right->parent = node->parent; // step1
|
||||||
node->parent->right = node->right; // step2
|
node->parent->right = node->right; // step2
|
||||||
node->right->left = node->left; // step3 : NULL for singly child
|
|
||||||
|
|
||||||
// options
|
// node->right->left = node->left; // step3 : NULL for singly child
|
||||||
node->right = NULL;
|
// // options
|
||||||
node->parent = NULL;
|
// node->right = NULL;
|
||||||
|
// node->parent = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
node->parent->right = NULL;
|
node->parent->right = NULL;
|
||||||
|
|
||||||
// options
|
// options
|
||||||
node->parent = NULL;
|
// node->parent = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1862,7 +1862,7 @@ bool tree_avl_delete(struct _tree* self, void* obj)
|
|||||||
// debug
|
// debug
|
||||||
self->print_obj(obj);
|
self->print_obj(obj);
|
||||||
|
|
||||||
if(node->left != NULL && node->right != NULL)
|
if((node->left != NULL) && (node->right != NULL))
|
||||||
{
|
{
|
||||||
// have two child
|
// have two child
|
||||||
tree_avl_delete_double_child(self, node);
|
tree_avl_delete_double_child(self, node);
|
||||||
@ -2083,6 +2083,7 @@ void tree_avl_breadth(struct _tree* self, struct _tree_node* root)
|
|||||||
static struct _tree_node* tree_find_min(struct _tree* self, struct _tree_node* root)
|
static struct _tree_node* tree_find_min(struct _tree* self, struct _tree_node* root)
|
||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
|
#if 0
|
||||||
if(root == NULL)
|
if(root == NULL)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -2092,6 +2093,20 @@ static struct _tree_node* tree_find_min(struct _tree* self, struct _tree_node* r
|
|||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
return tree_find_min(self, root->left);
|
return tree_find_min(self, root->left);
|
||||||
|
#else
|
||||||
|
while(root == NULL)
|
||||||
|
{
|
||||||
|
if(root->left != NULL)
|
||||||
|
{
|
||||||
|
root = root->left;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return root;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct _tree_node* tree_find_max(struct _tree* self, struct _tree_node* root)
|
static struct _tree_node* tree_find_max(struct _tree* self, struct _tree_node* root)
|
||||||
|
Loading…
Reference in New Issue
Block a user