Tworzenie drzewa binarnego z łańcuchów znakowych.

0

Witam, jak w temacie, oto kod :

struct tr
{
	char *word;
	int count;
	struct tr *left, *right;
};

typedef struct tr tree;

tree *add(tree *d, char *word)
{	

	if (!d) //d==NULL
	{                                                                                  //program nie sprawdza tego warunku !!
		tree *new_one = (tree*)malloc(sizeof(tree));              //
		new_one->word = word;
		new_one->count = 1;
		new_one->left = NULL;
		new_one->right = NULL;
		return new_one;
	}
	
	if (strcmp(d->word, word) ==0)
	{
		(d->count)++;
		return d;
	}
	if (strcmp(d->word, word)<0)
	{
		d->left=add(d->left, word);
	}
	if (strcmp(d->word, word)>0)
	{
		d->right=add(d->right, word);
	}
	return d;
}

void print(tree *d)
{
	if (d)
	{
		if (d->left)
			print(d->left);
		printf("%s\t %i\n", d->word, d->count);
		if (d->right)
			print(d->right);
	}
}



int main()
{

	tree nw;
	nw.word = (char*)malloc(30);
	nw.word = "blkaasd";

	add(&nw, "lolo");
	//printf("test1 \n");
//	add(&nw, "ao");
	//add(&nw, "bolo");
	//add(&nw, "golo");
	//add(&nw, "folo");
	//printf("test2 ");
	//print(&nw);
	return 0;
}

Program nie chce sprawdzić pierwszego warunku z funkcji add. Za wszelkie podpowiedzi z góry dziękuję.

0
tree *add(tree *root,const char *word)
  {
   tree *parent=NULL,*node=root;
   int v=0;
   while(node)
     {
      parent=node;
      v=strcmp(node->word,word);
      node=v<0?node->left:node->right;
     }
   node=(tree*)malloc(sizeof(tree));
   node->word=strdup(word);
   node->count=1;
   node->left=node->right=NULL;
   if(!parent) return node;
   if(v<0) parent->left=node;
   else parent->right=node;
   return root;
  }

int main()
  {
   tree *root=NULL;
   root=add(root,"lolo");
   return 0;
  }
0

A czy wiesz dlaczego nie chce wejść do warunku w mojej funkcji ? Pozdrawiam.

0

W mojej funkcji bardzo chce dojść do warunku i dochodzi do niego i znowu dochodzi i tak w kółko.
Głupie pytanie -> głupia odpowiedź.

1
if (!d) //d==NULL
{       //program nie sprawdza tego warunku !!

@rm1311 - ależ ten warunek zostaje sprawdzony, jednak nie zostaje spełniony, więc kod podwarunkowy nie będzie wykonany; Widać wskaźnik d wcale nie jest nullem tak jak zakładasz; Sprawdź więc dlaczego tak jest i popraw kod.

1

Może to pomoże: http://ideone.com/fork/iQp0i9

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