我的任务是实现一个基本的二叉树。树的节点是包含三个字段的结构,一个整数值和指向左右子节点的指针:
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;
}
}
打印左 child 值的函数(这就是问题所在):
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。
这可能是一个常见且无处不在的问题,但如何从 node_print()
函数内部正确访问 value
字段?如果可能,请指导我阅读一些解释性读物。
最佳答案
您的 init 函数使用了一个局部变量,该变量在函数返回后不再可用。将其更改为:
node *node_init(int value, node *child_left, node *child_right) {
node *k = malloc(sizeof(*k));
k->value= value;
k->child_left= child_left;
k->child_right= child_right;
return k;
}
关于c - 递归结构(二叉树): obtain values via struct pointer from inside function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55196540/