Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C++ by Andrzej ( 14 years ago )
int dodaj(struct wezel *&korzen;, int klucz)
{
struct wezel *biezacy, *poprzedni, *nowy_wezel, *przodek, * bufor;
int bufor_klucza;
nowy_wezel = new wezel;
nowy_wezel->lewy = NULL;
nowy_wezel->prawy = NULL;
nowy_wezel->klucz = klucz;
nowy_wezel->wspolczynnik_wywazenia = 0;
poprzedni = NULL;
biezacy = korzen;
cout << "Dodaje: " << klucz << endl;
while(biezacy)
{
if (biezacy->klucz == klucz)
{
delete nowy_wezel;
return 1;
}
poprzedni = biezacy;
if (biezacy->klucz > klucz)
{
biezacy = biezacy->lewy;
}
else
{
biezacy = biezacy->prawy;
}
}
if (!korzen)
{
korzen = nowy_wezel;
return 0;
}
else
{
if (poprzedni->klucz > klucz)
{
poprzedni->lewy = nowy_wezel;
}
else
{
poprzedni->prawy = nowy_wezel;
}
}
if ( poprzedni->wspolczynnik_wywazenia ) //Przodek wstawianego korzenia mial wczesniej prawego lub lewego syna
{
poprzedni->wspolczynnik_wywazenia = 0;
return 0;
}
if ( poprzedni->lewy == nowy_wezel ) //Przodek nie mial zadnego syna wiec uzupelniamy wspolczynnik
poprzedni->wspolczynnik_wywazenia = -1;
else
poprzedni->wspolczynnik_wywazenia = 1;
przodek = ojciec ( korzen, poprzedni->klucz );
while ( przodek ) //Idziemy do korzenia i uzupelniamy wspolczynniki
{
if ( przodek->wspolczynnik_wywazenia )
break;
if ( przodek->lewy == poprzedni )
przodek->wspolczynnik_wywazenia = -1;
else
przodek->wspolczynnik_wywazenia = 1;
poprzedni = przodek;
przodek = ojciec ( korzen, przodek->klucz);
}
if ( !przodek )
{
return 0;
}
if ( przodek->wspolczynnik_wywazenia == -1 )
{
if ( przodek->prawy == poprzedni )
{
przodek->wspolczynnik_wywazenia = 0;
return 0;
}
if ( poprzedni->wspolczynnik_wywazenia == 1 ) //Jesli przodek przodka jest znierownowazony to przechodzimy do rotacji
{
rotacja_lewa ( korzen, klucz );
rotacja_prawa ( korzen, klucz );
}
else
rotacja_prawa ( korzen, poprzedni->klucz );
return 0;
}
else
{
if ( przodek->lewy == poprzedni )
{
przodek->wspolczynnik_wywazenia = 0;
return 0;
}
if ( poprzedni->wspolczynnik_wywazenia == -1 )
{
rotacja_prawa ( korzen, klucz );
rotacja_lewa ( korzen, klucz );
}
else
rotacja_lewa ( korzen, poprzedni->klucz );
return 0;
}
ilosc_elementow++;
return 0;
}
Revise this Paste