c - 为什么BST插入末尾需要返回?

标签 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;
}

最佳答案

是的,你可以这么说。但更一般地说,每当您的程序创建一个节点(在合适的位置)时,您都可以这样说,它需要将自身附加到树上。现在要做到这一点,他们需要了解新节点。这就是返回的帮助所在。

现在想想,要做到这一点,您必须返回struct node*。你宣布了​​。 但是您是否注意到,从逻辑上讲,只有当您需要了解新创建的节点时,一旦知道它并将其添加到树中,您就不需要这样做。但那又怎样呢?您已告知您将返回struct node*。所以你正在返回。您自己评论了此/* return the (unchanged) node指针*/

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

关于c - 为什么BST插入末尾需要返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46945761/

相关文章:

c - C 中的无限循环,代码块

c++ - size_t 的大小是否始终等于 void * 的大小

algorithm - 计算二叉搜索树高度的最佳方法? (平衡 AVL 树)

c - 某些 .c 文件的一个 header 会导致链接器错误

结合参数 getopt 的选项

c - fread() 在 C 中的返回值

xml - 是否有将结构对象编码为 HTTP GET 请求参数的标准语法?

Java操作系统进程队列

C - 从不同的函数访问结构变量

java - 链表的头节点未更新