将新节点插入二叉树并返回其头指针

时间:2014-05-05 09:47:07

标签: c binary-search-tree

您好我需要创建一个将新节点插入二叉搜索树并返回指向该树的头/根的指针的函数。 我的问题是返回值,我似乎无法弄清楚如何以递归方式返回树的头部。如下所示。

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);
    }
}

2 个答案:

答案 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;
}