我不明白为什么"返回节点"这里需要??它是从堆栈中激活记录的顶部弹出或什么??
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;
}
答案 0 :(得分:0)
是的,你可以这么说。但更常见的是,只要程序创建一个节点(在合适的位置),它就可以说出这样的东西,它需要将自己附加到树上。现在要做到这一点,他们需要了解新节点。这就是回报的帮助。
现在想想,要做到这一点,你必须返回struct node*
。你声明了。
但是,您是否只在逻辑上注意到一旦您需要了解新创建的节点,并且一旦知道并添加到树中就不需要这样做了。但那又怎么样?你告诉过你会回来struct node*
。所以你要归还它。你自己评论了这个/* return the (unchanged) node pointer */
。
你问它是来自堆栈还是..?您可以安全地考虑我们从最顶层的框架返回,然后调用它的函数实例将获得该值,而不是专注于函数调用的实现。它可能是新节点或将再次重新分配的旧节点。
答案 1 :(得分:0)
此部分代码用于在BST中插入节点。由于插入函数是递归调用的,因此需要返回节点。因此,当节点到达其正确位置时,将调用newNode。此时将创建一个newNode并且value将被插入到它之后,但之后必须将newNode的地址返回到某个节点next。