drzewko BST

0

Witam serdecznie. Potrzebuje pomocy..chce dodawac losowe wartosci do drzewa BST, ilosc tych elementow zostaje wskazana przez uzytkownika...sek w tym, ze te wartosci musza byc rozne...moj problem polega na tym, ze jesli wybiore np 5 elementow do dodania (losowych liczb), lecz jesli generator wylosuje takie same, to one nie zostana dodane...ponizej przedstawiam kodzik

bool insert_rand(drzewko *&root, int value)
{
	int los;
	
	if(root == NULL)
	{	
		root = new drzewko;
		root->left = NULL;
		root->right = NULL;
		root->key = value;
	
	}
	else if(root != NULL)
	{
		if(value < root->key)
		{
			insert_rand(root->left, value);
		}
		else if(value > root->key)
		{
			insert_rand(root->right, value);
		
		}
		else if(value == root->key)
		{
			std::cout << " \nElement juz istnieje";
			
			
			
			return false;
		}
		
	}
		
}
0

Wywal: std::cout << " \nElement juz istnieje";
Dodaj na końcu funkcji return true;
Wstawiasz tak: for(i=0;i<5;i+=insert_rand(root,rand())) {}

0

hmm troche nie rozumiem twojego podejscia...musze zrobic tak, aby wszystkie wartosci w drzewie byly rozne...i ma byc ich tyle ile uzytkownik poda...jednak u mnie jesli pojawi sie taka sama to juz nie chce jej dodac odpowiednio...przedstawiam ponizej kod i prosze o pomoc

bool insert_rand(drzewko *&root, int value)
{

	if(root == NULL)
	{	
		root = new drzewko;
		root->left = NULL;
		root->right = NULL;
		root->key = value;
	
	}
	else if(root != NULL)
	{	
		
	    if(value == root->key) //sprawdza czy wartosc jest taka sama jak klucza
	    {
			do{
				value = rand() % 50 +1; //zmieniamy value tak dlugo, az bedzie rozny od root->key
				
				}while(value == root->key);
				if(value != root->key) 
				{
					
				    if(value < root->key)
					{
						insert_rand(root->left, value);
					}
					else if(value > root->key)
					{
						insert_rand(root->right, value);
		
					}
				}
		}
		else if(value != root->key)
		{
					if(value < root->key)
					{
						insert_rand(root->left, value);
					}
					else if(value > root->key)
					{
						insert_rand(root->right, value);
		
					}
		}
}
}

funkcje wywoluje


 std::cout << "Ile elementow chcesz dodac: ";
				std::cin >> ile;
				srand(time(NULL));
			
					for(int i=0; i<ile; i++)
					{	
						liczba_los = rand() % 50 +1;
					
						insert_rand(wezel, liczba_los);
					
					}
0

nie rozumiem petli for...ale jesli ty mnie rozumiesz to daj jakas wskazowke do tego, co sam napisalem hmm?

0

I zamiast próbować zrozumieć pętle kompletnie popsułeś wstawianie do drzewka?

0

hmm, jesli dodaje twoja petle do maina, i chce wstawic jakakolwiek ilosc wezlow, to dodaje mi tylko 2 wezly...


	for(int i=0; i<ile; i+=insert(wezel, rand()))
					{	
						liczba_los = rand() % 50 +1;
					
						insert_rand(wezel, liczba_los);
					
					}
bool insert_rand(drzewko *&root, int value)
{
	int licznik = 0;
	drzewko *korzen;
	korzen = root;

	if(root == NULL)
	{	
		root = new drzewko;
		root->left = NULL;
		root->right = NULL;
		root->key = value;
	
	}
	else if(root != NULL)
	{	
		
	
		if(value < root->key)
		{
				insert_rand(root->left, value);
		}
		else if(value > root->key)
		{
				insert_rand(root->right, value);
		
		}
		else if(value == root->key)
		{
			
			return true;
			
		}
		
	}
}

0
bool insert_rand(drzewko *&root, int value)
  {
   if(!root)
     {        
      root=new drzewko;
      root->left=root->right=0;
      root->key=value;
      return true;
     }
   if(value<root->key) return insert_rand(root->left,value);
   if(value>root->key) return insert_rand(root->right,value);
   return false;
  }

int main()
  {
   std::cout<<"Ile elementow chcesz dodac: ";
   int ile;
   std::cin>>ile;
   srand(time(0));
   drzewko *korzen=0;
   for(i=0;i<ile;i+=insert_rand(korzen,rand()%50+1)) {}
   return 0;
  }

Nie rozumiesz nie tylko pętli, nie rozumiesz niczego w programowaniu. Nawet zrozumieć kilka prostych zdań nie potrafisz.

0

chyba sie uporalem...uff wielkie dzieki za pomoc!..prosilbym jeszcze tylko o potwierdzenie..czy git, czy moze jeszcze cos do poprawy... ;)

wywolywanie:

std::cout << "Ile elementow chcesz dodac: ";
				std::cin >> ile;
				srand(time(NULL));
				
			
					for(int i=0; i<ile; i++)
					{	
						
						liczba_los = rand() % 50 +1;
						tmp = insert_rand(wezel, liczba_los);
						if(tmp == 1)
						{	
							liczba_los = rand();
							insert_rand(wezel, liczba_los);
							
						}
					
					}

bool insert_rand(drzewko *&root, int value)
{
	int licznik = 0;
	drzewko *korzen;
	korzen = root;

	if(root == NULL)
	{	
		root = new drzewko;
		root->left = NULL;
		root->right = NULL;
		root->key = value;
	
	}
	else if(root != NULL)
	{	
		
	
		if(value < root->key)
		{
				insert_rand(root->left, value);
		}
		else if(value > root->key)
		{
				insert_rand(root->right, value);
		
		}
		else if(value == root->key)
		{
			std::cout << "JEST: ";
			return true;
			
		}
		
	}
}

0

Nie, nie będzie działać poprawnie. Podałem ci wersje działającą poprawnie. Nawet tego nie zrozumiałeś.

0

wybacz, ale jestes w bledzie myslac, ze dodalem swoj kod po przeanalizowaniu twojego...bardziej skupiam sie na swoich domyslach, a twoje uznaje jako ewentualne podpowiedzi :) teraz sprawdze wiec twoja propozycje skoro moja sie nie nadaje...po co tyle kwasu?

0

hmm...przepisalem dokladnie co napisales i niestety...rowniez nie dziala:/ funkcja ma zwracac 1 w przypadku powodzenia, a 0 w przypadku niepowodzenia...zatem jesli bedzie 0 to petla wykona dodatkowy obrot az sie uda dodac...ale niestety nie dziala:/ skoro twoj pomysl zawiodl...to chyba naprawde jest cos nie ok?...

0

Oznacza to tylko jedno - nie jesteś w stanie nawet poprawnie przepisać. Za niewielką opłatę możesz zamówić gotowca.

1 użytkowników online, w tym zalogowanych: 0, gości: 1