您好我需要创建一个将新节点插入二叉搜索树并返回指向该树的头/根的指针的函数。 我的问题是返回值,我似乎无法弄清楚如何以递归方式返回树的头部。如下所示。
tree_type insertNode (tree_type tree, int data) {
tree_type temp = NULL;
if(!tree)
{
temp = (tree_type)malloc(3*sizeof(tree_type));
temp->left = temp->right = NULL;
temp->data = data;
tree = temp;
return ;
}
if(data < tree->data)
{
insertNode(tree->left, data);
}
else if(data > tree->data)
{
insertNode(tree->right, data);
}
}
答案 0 :(得分:1)
首先,赋值tree = temp
是无用的,因为tree
是一个局部变量,当函数返回时它会消失。
其次,声明为返回return;
以外的类型的函数中的void
需要诊断;它不是有效的C或C ++。
而不是
tree = temp;
return;
考虑返回新树:
return temp;
(不需要变量temp
;您可以在这种情况下使用变量tree
然后使用return tree
)。
如何返回根节点的问题很简单:
if(data < tree->data)
{
tree->left = insertNode(tree->left, data);
return tree;
}
等等。如果在temp
案例中删除变量tree
并使用malloc
,则您的函数可以只包含一个由return tree;
组成的返回点。
如果tree->left
为空,则insertNode(tree->left, data)
接收空左参数,因此接收新节点。我们必须捕获此返回值并将其分配给tree->left
。如果tree->left
不为空,则insertNode
将返回tree->left
,因此分配只会将相同的值重新写回tree->left
。
答案 1 :(得分:0)
这就是你需要的吗?
if(!tree)
{
temp = (tree_type) malloc(sizeof(*temp));
temp->left = temp->right = NULL;
temp->data = data;
return temp;
}
if(data < tree->data)
{
tree->left = insertNode(tree->left, data);
return tree->left;
}
else if(data > tree->data)
{
tree->right = insertNode(tree->right, data);
return tree->right;
}