Я выполняю базовое двоичное дерево. Узлы дерева - это структуры, содержащие три поля, целочисленное значение и указатели на левого и правого потомков:
typedef struct node {
int value;
struct node *child_left;
struct node *child_right;
} node;
Новая структура узла инициализируется как:
node node_init(int value, node *child_left, node *child_right) {
node k = {value, child_left, child_right};
return k;
}
Функция для хранения значения внутри левого потомка родительского узла:
int insert_left(node *t, int value) {
node k = node_init(value, NULL, NULL);
if (t->child_left == NULL) {
t->child_left = &k;
}
else {
k.child_left = t->child_left;
t->child_left = &k;
}
}
Функция для вывода значения левого потомка (вот где проблема):
int node_print(node k) {
printf("%d", k.child_left->value);
}
Основная функция для проверки основного двоичного дерева:
int main(int argc, char* argv[]) {
node root = node_init(7, NULL, NULL);
insert_left(&root, 3);
printf("%d\n", root.child_left->value);
node_print(root);
}
При выполнении этого примера прямой вызов printf()
правильно печатает 3 как значение левого потомка, но node_print()
выводит значение адреса указателя, например, -406140704.
Это может быть распространенной и вездесущей проблемой, но как мне правильно получить доступ к полю value
изнутри функции node_print()
? Если возможно, пожалуйста, направьте меня к некоторому пояснительному чтению.