предупреждение
struct tree {
int number;
tree *izq;
tree *der;
};
должно быть
struct tree {
int number;
struct tree *izq;
struct tree *der;
};
потому что случай, когда узел имеет значение NULL, проверяется в начале, вы можете упростить:
void printTree(bst node) {
if (node != NULL) {
printTree(node->izq);
printf("%d", node->number);
printTree(node->der);
}
}
добавление уровня:
void printTree(bst node, int lvl) {
if (node != NULL) {
printTree(node->izq, lvl + 1);
printf("%d #%d\n", node->number, lvl);
printTree(node->der, lvl + 1);
}
}
и вы звоните на корневом уровне с уровнем 0
Создание полной программы:
#include <stdio.h>
#include <stdlib.h>
struct tree {
int number;
struct tree *izq;
struct tree *der;
};
typedef struct tree *bst;
void printTree(bst node, int lvl) {
if (node != NULL) {
printTree(node->izq, lvl + 1);
printf("%d #%d\n", node->number, lvl);
printTree(node->der, lvl + 1);
}
}
struct tree * mk(int v, struct tree * l, struct tree * r)
{
struct tree * t = malloc(sizeof(struct tree));
t->number = v;
t->izq = l;
t->der = r;
return t;
}
int main()
{
struct tree * r = mk(5, mk(4, NULL, NULL), mk(9, mk(7, NULL, NULL), mk(10, NULL, mk(18, NULL, NULL))));
printTree(r, 0);
}
Компиляция исполнения:
pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra c.c
pi@raspberrypi:/tmp $ ./a.out
4 #1
5 #0
7 #2
9 #1
10 #2
18 #3