Вот мой код, который работает почти правильно, за исключением бесконечного цикла в printInTree()
Бесконечный цикл при печати двоичного дерева
struct node{
char text[100];
int count;
struct node* left;
struct node* right;
};
struct node* addNode(struct node* n,char w[]){
int cond=0;
if(n == NULL){
n=malloc(sizeof(struct node));
n->count=1;
n->left=NULL;
n->right=NULL;
strcpy(n->text,w);
}
else if((cond=strcmp(w,n->text))==0){
n->count++;
}
else if(cond>0){
n->right=addNode(n->right,w);
}
else{
n->left=addNode(n->left,w);
}
return n;
};
void printInTree(struct node* p){
while(p != NULL){ //infinite loop here.
printInTree(p->left);
printf("%3s - %d\n",p->text,p->count);
printInTree(p->right);
}
}
void b_treeDemo(){
struct node *root=NULL;
FILE* f=fopen("main.c","r");
char word[100];
while(1){
if(getWord(f,word)>0){
if(isalpha(word[0])){
root=addNode(root,word);
}
}else{
break;
}
}
printInTree(root);
}
Как разорвать этот цикл так, что она печатает дерево в заказовМои.
Это канонический способ печати дерева по порядку. Если это не сработало, проблема должна быть в другом месте. –
В решении нет петли: вы выполняете рекурсию, а не итерацию (цикл). –
Это может быть в самой структуре данных, но для того, что я могу сказать комментарием по моему ответу, это должно было сработать. –