返回结构指针

时间:2015-09-13 14:07:59

标签: c

我对下面的code感到困惑:

struct node* newNode(int data) 
{
  struct node* node = (struct node*)
                       malloc(sizeof(struct node));
  node->data  = data;
  node->left  = NULL;
  node->right = NULL;

  return(node);
}

struct node* insert(struct node* node, int data) 
{
  /* 1. If the tree is empty, return a new,     
      single node */
  if (node == NULL) 
    return(newNode(data));  
  else
  {
    /* 2. Otherwise, recur down the tree */
    if (data <= node->data) 
        node->left  = insert(node->left, data);
    else
        node->right = insert(node->right, data);

    /* return the (unchanged) node pointer */
    return node; 
  }
}

newNode返回指向已分配的结构的指针。但是在insert函数的第6行中,newNode的返回值没有分配给任何东西,它只是被调用。代码如何能够进一步使用新创建的节点结构?

2 个答案:

答案 0 :(得分:2)

如果树 NOT 为空,则下面的代码将运行。因此,当步骤.2中的代码运行时,步骤.1中的代码不会。

当递归展开时,您可以看到分配操作正在发生,例如:

node->left  = insert(node->left, data);

哦,正如ThunderWiring所说,do not cast malloc!

答案 1 :(得分:0)

你拥有的是一棵有序的树。

您可以通过传递NULL指针来创建树,然后您将获得顶级节点。接下来,当您添加新项目时,它们将自动插入到正确的位置。但要注意树的结构将在很大程度上取决于插入顺序。

如果有效,因为在insert函数的第6行,newNode的返回值将返回给调用者。如果node最初是NULL,那么程序员应该创建一个顶级节点,如:

struct node *top = insert(NULL, data);

因此newNode的返回值最终将分配给指针top

在现有树中插入值时,将向下递归树,直到找到其left(resp。right)字段中具有NULL的节点,并且新创建的节点将被分配给该(先前为NULL)字段。