drzewo binarne

0

Mam do zrobienia programik: drzewo binarne do którego wpisujemy poszczególne wyrazy, mają być umieszczane tak jak w słowniku. Waźne jest tylko wyświetlanie drzewa (w formie listy) i dodawanie kolejnych stringów, acha i program ma alokować pamięć dynamicznie na każdy wpisany wyraz. Napisałem coś takiego ale cokolwiek bym nie wpisał program nie dodaje żadnego elementu. Mógłby ktoś spojrzeć co jest nie tak co poprawić?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100

struct node {
	char s;
	struct node *left, *right;
};

void printT(struct node *root) {
	if(!root) {
		printf("\n\tThe tree is empty\n");
	}
	else {
		printT(root->left);
		printf("%c\t", root->s);
		printT(root->right);
	}
	printf("\n");
}

int add(struct node* root) {
	char *name, string[MAX];
	struct node *new_s;

	printf("\n\tPut string\n");
	gets(string);
	name=(char*)malloc(strlen(string)+1);
	if(!name) {
		return 1;
	}
	strcpy(name,string);
	new_s=(node*)malloc(sizeof(node));
	new_s->left=NULL;
	new_s->right=NULL;
	new_s->s=*name;

	if(!root) {
		root=new_s;
	}

		if(strcmp(string,&(root->s))<0) {
			root->left=new_s;
		}
		else {
			root->right=new_s;
		}
	if(strcmp(string,&(root->s))<0) {
		add(root->left, string);
	}
	else {
		add(root->right, string);
	}
	return 0;
}

int menu(void) {
	int m;
	printf("\n\t_______________________\n");
	printf("\tWhat do you want to do?\n\n");
	printf("\t1. DISPLAY tree?\n");
	printf("\t2. ADD element to tree?\n");
	printf("\t3. EXIT program\n\n");

	do {
		printf("\tYour choice is: ");
		scanf("%d", &m);
		flushall();
	} while(m<0 || m>3);
	return m;
}

int main() {
	char choice, str[MAX];
	node *head = NULL;
	for(;;) {
		choice=menu();
		switch(choice) {
		case 1:
			printT(head);
			break;
		case 2:
			add(head);
			break;
		case 3:
			exit(0);
			free(head);
		}
	}
	return 0;
}
0

W definicji node zamień char s; na char *s;

Później, zamiast
new_s->s=*name;
wpisz
new_s->s=name;

&(root->s)
zamień na
root->s

porównanie strcmp(string,root->s) jest bez sensu gdy dodajesz pierwszy element

Nie podałeś definicji add/2

I jeszcze jedna rada, zamiast gets() użyj fgets()

0

a czy to w ogole Ci sie skompilowalo?
gdzie definiujesz typ "node"?

i w deklaracji tej struktury "node" wydaje mi sie, ze chciales dac "char *c" a nie "char c" :)

0

Dodam jeszcze, że:

if(!root) 
{
   root=new_s;
}

root jest wskaźnikiem lokalnym, więc powyższe przypisanie nie ma wpływu na drzewo podane w parametrze. Powinno być:

int add(struct node** root)
{
   [...]

   if(!*root) 
   {
      *root=new_s;
   }

   [...]
}

oczywiście resztę odwołań do root też musisz pozmieniać.

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