Pagini recente » Diferente pentru utilizator/vladth11 intre reviziile 16 si 15 | Diferente pentru okr/20091 intre reviziile 24 si 23 | Istoria paginii utilizator/radugheo | misiune | Diferente pentru treapuri intre reviziile 13 si 12
Diferente pentru
treapuri intre reviziile
#13 si
#12
Nu exista diferente intre titluri.
Diferente intre continut:
T* balance(T *n) // restabileste invariantul heapurilor
{
// balance() e apelat dupa un insert(), deci doar cel mult unul din cei doi fii nu respecta invariantul heapurilor
// balance() e apelat dupa un insert(), deci doar cel mult unul
// din fii nu respecta invariantul heapurilor
if (n->left->priority > n->priority)
return rotleft(n);
n->left = insert(n->left, key);
else if (key > n->key)
n->right = insert(n->right, key);
// altfel e un duplicat; nu face nimic
return balance(n); // restabileste invariantul heapurilor
}
else if (key > n->key)
n->right = erase(n->right, key);
else {
// am gasit cheia; pune fiul cu prioritatea cea mai mare ca radacina in locul lui `n`
// am gasit cheia
// pune fiul cu prioritatea cea mai mare ca radacina in locul lui `n`
n = (n->left->priority > n->right->priority) ? rotleft(n) : rotright(n);
if (n != nil) // continua
n = erase(n, key);
{
if (n != nil)
{
empty(n->left), empty(n->right);
empty(n->left);
empty(n->right);
delete n;
}
return nil;
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.