递归结构(二叉树):通过内部函数的结构指针获取值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归结构(二叉树):通过内部函数的结构指针获取值相关的知识,希望对你有一定的参考价值。
我的任务是实现一个基本的二叉树。树的节点是包含三个字段的结构,一个整数值和指向左右子节点的指针:
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()
字段?如果可能的话,请指导我解释一下。
答案
你的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;
以上是关于递归结构(二叉树):通过内部函数的结构指针获取值的主要内容,如果未能解决你的问题,请参考以下文章