无法理解此功能返回

时间:2017-08-31 13:07:27

标签: c tree return void

我正在使用我在这里找到的以下代码来开始涉及树数据结构的项目。

struct node{

    int ID;
    struct node* next;
    struct node* child;
};

typedef struct node node;

node* new_node(int);
node* add_sibling(node*, int);
node* add_child(node*, int);


int main()
{
    int i;
    node *root = new_node(0);
    for (i = 1; i <= 3; i++)
        add_child(root, i);
}

node * new_node(int ID)
{
    node* new_node =(node*) malloc(sizeof(node));
    if (new_node) {
        new_node->next = NULL;
        new_node->child = NULL;
        new_node->ID = ID;
    }

    return new_node;
}

node* add_sibling(node* n, int ID)
{
    if (n == NULL)
        return NULL;

    while (n->next)
        n = n->next;

    return (n->next = new_node(ID));
}

node* add_child(node* n, int ID)
{
    if (n == NULL)
        return NULL;
    if (n->child)
        return add_sibling(n->child, ID);
    else
        return (n->child = new_node(ID));
}

我是C / C ++和编程的初学者。我想除了 add_child 函数之外,我理解代码的一切。该函数似乎返回一个指向节点的指针,但是当它在main中被调用时,它似乎被调用,好像它是一个void函数。我本来想过以这种方式调用函数

*root = add_child(root,i);

如何调用new_node,或将add_child编写为void函数,但这两个修改都会导致错误(更不用说我发现 工作的代码中的实现)。我错过了什么?

1 个答案:

答案 0 :(得分:0)

重写此函数将如下所示。

node* add_child(node* n, int ID)
{
    // For null pointer return null
    if (n == NULL)
    {
        return NULL;
    }

    // If element has child add a sibling to that child
    if (n->child)
    {
        node* sibling_for_child = add_sibling(n->child, ID);
        return sibling_for_child;
    }
    else
    {
        // Otherwise just add element as a child
        node* child_node = new_node(ID);
        n->child = child_node;
        return child_node;
    }
}

赋值的结果是一个赋值(*),就像在这个链接赋值中一样:

int a, b;
a = b = 3;

实际上是:

a = (b = 3);

b = 3;
a = b;