我尝试了二叉树数据结构,但发现它不起作用并发出错误。请更正我的代码。谢谢!
它会发出警告,但main
中的输入会停止运行。
#include<stdlib.h>
#include<stdio.h>
typedef struct
{
int item;
struct node * leftc;
struct node * rightc;
}node;
void create(int key, node **tree )
{
if(*tree ==0)
{
(*tree)= (node *)malloc(sizeof(node *));
(*tree)->item=key;
(*tree)->leftc=((*tree)->rightc)=NULL;
}
else
{
if(key >= (*tree)->item )
{
create(key, &((*tree)->rightc));
}
else if(key<(*tree)->item)
{
create(key, &((*tree)->leftc));
}
}
}
node * search(int key, node * tree)
{
if(tree !=NULL)
{
if(key == tree->item)
return tree;
else if(key > tree->item)
search(key, tree->rightc);
else
search(key, tree->leftc);
}
return NULL;
}
void cut(node * tree)
{
if(tree != NULL)
{
cut(tree->leftc);
cut(tree->rightc);
free(tree);
}
}
void print_preorder(node * tree)
{
if (tree) {
printf("%d\n",tree->item);
print_preorder(tree->leftc);
print_preorder(tree->rightc);
}
}
int main()
{
node * root=NULL;
create(9,&root);
create(16,&root);
create(24,&root);
create(6,&root);
return 0;
}
答案 0 :(得分:0)
我知道这不会回答您关于错误的问题,但我发现您的search()
功能存在严重问题。如果它是第一个放入函数的节点,您只返回您正在寻找的节点。对search()
的递归调用不会返回任何内容。该函数应如下所示:
node * search(int key, node * tree)
{
if (tree !=NULL)
{
if (key == tree->item) {
return tree;
} else if (key > tree->item) {
return search(key, tree->rightc);
} else if (key < tree->item) {
return search(key, tree->leftc);
}
}
return NULL;
}
此外,在您的create()
功能中,您的意思是检查if (*tree == NULL)
而不是if (*tree == 0)
吗?
答案 1 :(得分:0)
更改
typedef struct
{
int item;
struct node * leftc;
struct node * rightc;
}node;
到
typedef struct node
{
int item;
struct node * leftc;
struct node * rightc;
}node;
在您的结构中,您可以参考结构节点&#39;所以你需要这个名字才能正确引用自己。当然,在typedef之后,你可以将它称为节点。
测试程序已编译并使用其他方式运行正常。