为什么在BST插入结束时需要返回?

时间:2017-10-26 04:15:11

标签: c data-structures

我不明白为什么"返回节点"这里需要??它是从堆栈中激活记录的顶部弹出或什么??

struct node* insert(struct node* node, int key)
{
    if (node == NULL) return newNode(key);

    /* Otherwise, recur down the tree */
    if (key < node->key)
        node->left  = insert(node->left, key);
    else if (key > node->key)
        node->right = insert(node->right, key);   

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

2 个答案:

答案 0 :(得分:0)

是的,你可以这么说。但更常见的是,只要程序创建一个节点(在合适的位置),它就可以说出这样的东西,它需要将自己附加到树上。现在要做到这一点,他们需要了解新节点。这就是回报的帮助。

现在想想,要做到这一点,你必须返回struct node*。你声明了。 但是,您是否只在逻辑上注意到一旦您需要了解新创建的节点,并且一旦知道并添加到树中就不需要这样做了。但那又怎么样?你告诉过你会回来struct node*。所以你要归还它。你自己评论了这个/* return the (unchanged) node pointer */

你问它是来自堆栈还是..?您可以安全地考虑我们从最顶层的框架返回,然后调用它的函数实例将获得该值,而不是专注于函数调用的实现。它可能是新节点或将再次重新分配的旧节点。

答案 1 :(得分:0)

此部分代码用于在BST中插入节点。由于插入函数是递归调用的,因此需要返回节点。因此,当节点到达其正确位置时,将调用newNode。此时将创建一个newNode并且value将被插入到它之后,但之后必须将newNode的地址返回到某个节点next。