我正在使用我在这里找到的以下代码来开始涉及树数据结构的项目。
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函数,但这两个修改都会导致错误(更不用说我发现 工作的代码中的实现)。我错过了什么?
答案 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;