int main() {
// insert code here...
treeNode **node;
createTree(node);
preOrder(*node);
return 0;
}
должно быть
int main() {
treeNode *node;
createTree(&node);
preOrder(node);
return 0;
}
еще в createTree *node = ...
запись в недопустимом местоположении (* узлу не задан правильный указатель в main )
Ваш ввод должен быть ABD***CEFG*****
для завершения:
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra b.c
pi@raspberrypi:/tmp $ ./a.out
ABD***CEFG******
ABDCEFGpi@raspberrypi:/tmp $
О вашем замечании:
да, я не знаю, какой слева, а какой правый
практический способ - нарисовать дерево.
Очень простой способ:
void draw(treeNode *node, int level, char empty)
{
if (node != NULL) {
draw(node->right, level+1, '/');
for (int i = 0; i != level; ++i)
putchar(' ');
printf("%c\n", node->val);
draw(node->left, level+1, '\\');
}
else {
for (int i = 0; i != level; ++i)
putchar(' ');
printf("%c\n", empty);
}
}
если я изменю основной на:
int main() {
treeNode *node;
createTree(&node);
preOrder(node);
putchar('\n');
draw(node, 1, ' ');
return 0;
}
Компиляция и исполнение:
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra b.c
pi@raspberrypi:/tmp $ ./a.out
ABD***CEFG*****
ABDCEFG
/
C
/
E
/
F
/
G
\
A
/
B
/
D
\
«/» означает, что справа ничего нет, а «\» означает, что слева ничего нет
[править] Некоторые способы нарисовать самое красивое дерево можно найти на C Как «нарисовать» двоичное дерево на консоли
Я сделал ошибку на входе, если я использую ваше значение ABD***CE**FG***
, результат будет:
/tmp % ./a.out
ABD***CE**FG***
ABDCEFG
/
F
/
G
\
C
/
E
\
A
/
B
/
D
\