Problem ze stworzeniem drzewa binarnego

0

Witam!
Jak w temacie. Mam strukturę:

 
struct node
{
	int val;
	node *left;
	node *right;
};

A w mainie zadeklarowane:

node *dad=NULL;
 

Potrzebuję pomocy z napisaniem funkcji InsertBST. Stworzyłem coś takiego, ale niestety nie działa

void InsertBST(node *&dad, int x)
{

	if(dad==NULL)
	{
		dad->val=x;
		dad->left=NULL;
		dad->right=NULL;
	}
	else
	{
		if(x>dad->val)
		{
			
			if(dad->right==NULL)
			{
				node *son=new node;
				son->val=x;
				dad->right=son;
				son->right=NULL;
				son->left=NULL;
			}
			else InsertBST(dad->right,x);
	
		}
		else
		{
			if(dad->left==NULL)
			{
				node *son=new node;
				son->val=x;
				dad->left=son;
				son->right=NULL;
				son->left=NULL;
			}
			else InsertBST(dad->left,x);
		}

	}
}
 
0

Bo w programowaniu trzeba narysować i pomyśleć a nie próbować dopasowywać. To zadziała:

void InsertBST(node *&dad,int val)
  {
   node *son=new node;
   son->left=NULL;
   son->right=NULL;
   son->val=val;
   if(!dad) dad=son;
   else if(val>dad->val) InsertBST(dad->right,val);
   else InsertBST(dad->left,val);
  }

Z tym że wersja rekurencyjna dla niezrównoważonego drzewa to zły pomysł, więc:

void InsertBST(node *&dad,int val)
  {
   node **up=&dad;
   while(*up) if(val>(*up)->val) up=&((*up)->right); else up=&((*up)->left);
   *up=new node;
   (*up)->left=(*up)->right=NULL;
   (*up)->val=val;
  }
0

Dzięki za pomoc, a wyświetlanie drzewa jak najlepiej zrobić rekurencyjnie? (żeby to dobrze na cout wyglądało) btw muszę rekurencyjnie zrobić ( bo to na zajęcia)

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