递归结构(二叉树):通过内部函数的结构指针获取值

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;

以上是关于递归结构(二叉树):通过内部函数的结构指针获取值的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的线索化

数据结构之二叉树

已知二叉树采用链表存储结构,根结点指针为T,请写出计算二叉树中度为2的结点数目的非递归算法

Morris遍历遍历二叉树

数据结构C++实验题 程序代码?

C++线索化二叉树