创建插入排序的void函数

时间:2017-07-13 17:04:41

标签: c recursion tree insert

嗨,有人可以向我解释这里有什么问题!我正在尝试为我的树创建一个插入排序函数,我正在使用void函数!我收到了这个错误:

无法将void类型的值分配给struct treeNode类型的实体

struct treeNode {
    int data;
    struct treeNode *left;
    struct treeNode *right;
};

typedef struct treeNode *BSTree;

void insertSorted(BSTree *tree, int data) {
    if (!*tree) {
        tree = createNode(data);
    } else
    if (data < (*tree)->data) {
        (*tree)->left = insertSorted((*tree)->left, data); //it's show upp here
    } else
        (*tree)->right = insertSorted((*tree)->right, data);

    return tree;
}

3 个答案:

答案 0 :(得分:4)

void insertSorted(BSTree *tree, int data)
{

    if (!*tree)
    {
        tree = createNode(data);
    }
    else if (data < (*tree)->data)
    {
    (*tree)->left = insertSorted((*tree)->left, data); //it's show upp here
    }
    else
        (*tree)->right = insertSorted((*tree)->right, data);
    return tree;
}

应该是

void insertSorted(BSTree *tree, int data){
    if (!*tree)
        *tree = createNode(data);
    else if (data < (*tree)->data)
        insertSorted(&(*tree)->left, data);//1st argument require `BSTree *tree`
    else
        insertSorted(&(*tree)->right, data);
}

BSTree insertSorted(BSTree tree, int data)
{

    if (!tree)
    {
        tree = createNode(data);
    }
    else if (data < tree->data)
    {
        tree->left = insertSorted(tree->left, data);
    }
    else
    {
        tree->right = insertSorted(tree->right, data);
    }
    return tree;
}

答案 1 :(得分:1)

如果要将函数编写为返回类型为void,则任何return语句都不应包含表达式,并且不应尝试为任何对象分配void“value”。

该功能可以按以下方式查看

void insertSorted( BSTree *tree, int data )
{
    if ( *tree == NULL )
    {
        *tree = createNode( data );
    }
    else if ( data < ( *tree )->data )
    {
        insertSorted( &( *tree )->left, data );
    }
    else
    {
        insertSorted( &( *tree )->right, data );
    }
}

这是一个示范程序

#include <stdio.h>
#include <stdlib.h>

struct treeNode
{
    int data;
    struct treeNode* left;
    struct treeNode* right;
};

typedef struct treeNode* BSTree;

BSTree createNode( int data )
{
    BSTree node = malloc( sizeof( *node ) );

    if ( node )
    {
        node->data = data;
        node->left = NULL;
        node->right = NULL;
    }

    return node;
}

void insertSorted( BSTree *tree, int data )
{
    if ( *tree == NULL )
    {
        *tree = createNode( data );
    }
    else if ( data < ( *tree )->data )
    {
        insertSorted( &( *tree )->left, data );
    }
    else
    {
        insertSorted( &( *tree )->right, data );
    }
}

void displayTree( BSTree * tree )
{
    if ( *tree != NULL )
    {
        displayTree( &( *tree )->left );

        printf( "%d ", ( *tree )->data );

        displayTree( &( *tree )->right );
    }
}

int main(void) 
{
    BSTree tree = NULL;
    int a[] = { 1, 5, 4, 3, 7, 8, 0 };
    const size_t N = sizeof( a ) / sizeof( *a );

    for ( size_t i = 0; i < N; i++ )
    {
        insertSorted( &tree, a[i] );
    }

    displayTree( &tree );

    return 0;
}

它的输出是

0 1 3 4 5 7 8 

答案 2 :(得分:0)

Void函数不返回值。那就是问题所在。您需要删除返回或更改函数声明以返回该指针