莫名其妙调试通过了!WC

This commit is contained in:
建峰 2024-06-24 01:27:11 +08:00
parent 63320bd01e
commit 8f5a994802

View File

@ -1416,8 +1416,11 @@ static struct _tree_node* tree_turn_left(struct _tree* self, struct _tree_node*
{
assert(self != NULL);
assert(root != NULL);
assert(root->right != NULL);
struct _tree_node* node = root->right;
if(node == NULL)
{
return root;
}
if(root->parent != NULL)
{
@ -1445,8 +1448,11 @@ static struct _tree_node* tree_turn_right(struct _tree* self, struct _tree_node*
{
assert(self != NULL);
assert(root != NULL);
assert(root->left != NULL);
struct _tree_node* node = root->left;
if(node == NULL)
{
return root;
}
if(root->parent != NULL)
{
@ -1528,6 +1534,10 @@ static bool tree_avl_rebalance(struct _tree* self, struct _tree_node* root)
{
return true;
}
if(root->left == NULL && root->right == NULL)
{
return true;
}
tree_set_balance(self, root);
int balance = root->balance;
@ -1725,6 +1735,10 @@ static bool tree_avl_delete_single_child(struct _tree* self, struct _tree_node*
node->right->parent = node->parent;
node->parent->left = node->right;
}
else
{
node->parent->left = NULL;
}
}
else if(node->parent->right == node)
{
@ -1738,6 +1752,10 @@ static bool tree_avl_delete_single_child(struct _tree* self, struct _tree_node*
node->right->parent = node->parent;
node->parent->right = node->right;
}
else
{
node->parent->right = NULL;
}
}
self->rebalance(self, node->parent);
@ -1801,6 +1819,8 @@ bool tree_avl_delete(struct _tree* self, void* obj)
{
node->parent->right = NULL;
}
self->rebalance(self, node->parent);
}
tree_node_free(node);
}