嗨,有人可以向我解释这里有什么问题!我正在尝试为我的树创建一个插入排序函数,我正在使用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;
}
答案 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函数不返回值。那就是问题所在。您需要删除返回或更改函数声明以返回该指针