Welcome, guest! Login / Register - Why register?
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

Your Name: Code Language: