Enable Treap balancing in tree.c
Doesn't seem to have a difference
This commit is contained in:
parent
f70bf85ec2
commit
3e5456b718
15
util/tree.c
15
util/tree.c
@ -47,11 +47,7 @@ tree_Node *__tree_InsertNodes(tree_Tree *t, tree_Node *node, tree_Node *father,
|
|||||||
if (!node) {
|
if (!node) {
|
||||||
if (added)
|
if (added)
|
||||||
*added = true;
|
*added = true;
|
||||||
#ifdef HELOS_UTIL_TREE_TYPE_TREAP
|
return *result = __tree_NewNode(t, key, father, rand() ^ key);
|
||||||
return *result = __tree_NewNode(t, key, father, random_Rand() ^ key);
|
|
||||||
#else
|
|
||||||
return *result = __tree_NewNode(t, key, father, 0);
|
|
||||||
#endif
|
|
||||||
} else if (key < node->key) {
|
} else if (key < node->key) {
|
||||||
node->left = __tree_InsertNodes(t, node->left, node, key, result, added);
|
node->left = __tree_InsertNodes(t, node->left, node, key, result, added);
|
||||||
return node;
|
return node;
|
||||||
@ -70,10 +66,8 @@ tree_Node *tree_InsertNode(tree_Tree *t, uintptr_t key, bool *added) {
|
|||||||
tree_Node *result;
|
tree_Node *result;
|
||||||
t->root = __tree_InsertNodes(t, t->root, 0, key, &result, added);
|
t->root = __tree_InsertNodes(t, t->root, 0, key, &result, added);
|
||||||
|
|
||||||
#ifdef HELOS_UTIL_TREE_TYPE_TREAP
|
if (added == NULL || *added)
|
||||||
if (*added)
|
|
||||||
__tree_treap_Adjust(result, &t->root);
|
__tree_treap_Adjust(result, &t->root);
|
||||||
#endif
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -108,16 +102,11 @@ void *tree_Find(tree_Tree *t, uintptr_t key) {
|
|||||||
|
|
||||||
|
|
||||||
void tree_Delete(tree_Tree *t, tree_Node *node) {
|
void tree_Delete(tree_Tree *t, tree_Node *node) {
|
||||||
#ifdef HELOS_UTIL_TREE_TYPE_TREAP
|
|
||||||
while (node->left && node->right)
|
while (node->left && node->right)
|
||||||
if (node->left->internal < node->right->internal)
|
if (node->left->internal < node->right->internal)
|
||||||
__tree_Rotate(node->left, &t->root);
|
__tree_Rotate(node->left, &t->root);
|
||||||
else
|
else
|
||||||
__tree_Rotate(node->right, &t->root);
|
__tree_Rotate(node->right, &t->root);
|
||||||
#else
|
|
||||||
while (node->left)
|
|
||||||
__tree_Rotate(node->left, &t->root);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (node == t->root)
|
if (node == t->root)
|
||||||
t->root = (node->left ? node->left : node->right);
|
t->root = (node->left ? node->left : node->right);
|
||||||
|
Loading…
Reference in New Issue
Block a user