mirror of
https://gitee.com/apaki/unicstl.git
synced 2025-07-03 23:56:54 +08:00
存在插入数据时,在特定情况下没翻转的bug
This commit is contained in:
parent
a8d378570f
commit
73f63fb411
12
src/tree.c
12
src/tree.c
@ -1480,7 +1480,7 @@ static struct _tree_node* tree_trun_left_then_right(struct _tree* self, struct _
|
|||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
assert(root != NULL);
|
assert(root != NULL);
|
||||||
struct _tree_node* node = root->left;
|
struct _tree_node* node = root->right;
|
||||||
if(node != NULL)
|
if(node != NULL)
|
||||||
{
|
{
|
||||||
tree_turn_left(self, node);
|
tree_turn_left(self, node);
|
||||||
@ -1493,7 +1493,7 @@ static struct _tree_node* tree_trun_right_then_left(struct _tree* self, struct _
|
|||||||
{
|
{
|
||||||
assert(self != NULL);
|
assert(self != NULL);
|
||||||
assert(root != NULL);
|
assert(root != NULL);
|
||||||
struct _tree_node* node = root->right;
|
struct _tree_node* node = root->left;
|
||||||
if(node != NULL)
|
if(node != NULL)
|
||||||
{
|
{
|
||||||
tree_turn_right(self, node);
|
tree_turn_right(self, node);
|
||||||
@ -1524,7 +1524,7 @@ int32_t tree_height(struct _tree* self, struct _tree_node* root)
|
|||||||
* | 1 | 2 | 1 | ×óÐý
|
* | 1 | 2 | 1 | ×óÐý
|
||||||
* | 2 | 2 | -1 | ÏÈÓÒÐýºó×óÐý
|
* | 2 | 2 | -1 | ÏÈÓÒÐýºó×óÐý
|
||||||
* | 3 | -2 | -1 | ÓÒÐý
|
* | 3 | -2 | -1 | ÓÒÐý
|
||||||
* | 4 | -2 | 1 | ÏÈÓÒÐýºó×óÐý
|
* | 4 | -2 | 1 | ÏÈ×óÐýºóÓÒÐý
|
||||||
*
|
*
|
||||||
* @param self
|
* @param self
|
||||||
* @return true
|
* @return true
|
||||||
@ -1541,7 +1541,7 @@ static bool tree_avl_rebalance(struct _tree* self, struct _tree_node* root)
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
self->print_obj(root->obj);
|
||||||
tree_set_balance(self, root);
|
tree_set_balance(self, root);
|
||||||
int balance = root->balance;
|
int balance = root->balance;
|
||||||
if(balance == 2)
|
if(balance == 2)
|
||||||
@ -1552,7 +1552,7 @@ static bool tree_avl_rebalance(struct _tree* self, struct _tree_node* root)
|
|||||||
}
|
}
|
||||||
else if(root->right->balance == -1)
|
else if(root->right->balance == -1)
|
||||||
{
|
{
|
||||||
root = tree_trun_left_then_right(self, root);
|
root = tree_trun_right_then_left(self, root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(balance == -2)
|
else if(balance == -2)
|
||||||
@ -1563,7 +1563,7 @@ static bool tree_avl_rebalance(struct _tree* self, struct _tree_node* root)
|
|||||||
}
|
}
|
||||||
else if(root->left->balance == 1)
|
else if(root->left->balance == 1)
|
||||||
{
|
{
|
||||||
root = tree_trun_right_then_left(self, root);
|
root = tree_trun_left_then_right(self, root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -297,6 +297,10 @@ void test_tree_num(void)
|
|||||||
for (i = 0; i < len; i++)
|
for (i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
tree->insert(tree, &data[i]);
|
tree->insert(tree, &data[i]);
|
||||||
|
|
||||||
|
printf("----- preorder -----\n");
|
||||||
|
tree->preorder(tree, tree->_root);
|
||||||
|
printf("\n");
|
||||||
}
|
}
|
||||||
printf("----- preorder -----\n");
|
printf("----- preorder -----\n");
|
||||||
tree->preorder(tree, tree->_root);
|
tree->preorder(tree, tree->_root);
|
||||||
|
Loading…
Reference in New Issue
Block a user