Почему функция treeprint терпит неудачу?
Это неудобный вопрос, но если я не спрошу, я никогда не узнаю, что происходит, поэтому заранее спасибо за вашу помощь. Я пытаюсь выполнить упражнение 6-2 в K&R (двоичное дерево). Мне нужно написать программу, которая читает программу на C и печатает в алфавитном порядке каждую группу имен переменных, которые идентичны в первых символах «X», но где-то после этого отличаются. Мой подход состоит в том, чтобы определить структуру, которая содержит массив слов, а не одно слово (как в примере, приведенном в книге), чтобы слова с одинаковыми символами «X» могли храниться в одном узле. Поэтому я попробовал протестировать эту концепцию, прежде чем обращаться ко всему. Но когда я пытаюсь запустить следующий код, хотя кажется, что функция addtree работает (согласно отладчику), древовидная печать - нет. Он печатает переменные, у которых есть те же первые 3 символа до сбоя (ошибка сегментации, поэтому он не печатает слова в других узлах). Не совсем уверен, что происходит. Благодарность!
Кстати, я нахожу бинарное дерево действительно интригующей концепцией!
Что я уже пробовал:
struct tnode *addtree(struct tnode *p, char *w){ int cond; if(p==NULL){ p=talloc(); p->np=p->word; *(p->np)=strdup(w); p->count=1; p->left=p->right=NULL; } else if((cond=strncmp(w,*(p->np),3))==0){ (p->np)++; *(p->np)=strdup(w); p->count++; } else if(cond<0) p->left=addtree(p->left,w); else p->right=addtree(p->right,w); return p; } void treeprint(struct tnode *p){ if(p!=NULL){ treeprint(p->left); for(int i=0;(p->word[i])!="";i++) printf("%4d %s\n",p->count,p->word[i]); treeprint(p->right); } }