对于给定的代码,我得到“无法将节点**转换为节点**错误”。
这两个都是node**。
将insertintoBST函数与其声明进行比较时出错。
节点是一个结构变量。
在这里,我试图实现插入到二进制搜索树中。
#include<stdio.h>
#include<conio.h>
void inserttoBST(struct node**,int,int);
void main()
{
int choice,i,j;
struct node{
int value;
int key;
struct node*left;
struct node*right;
};
struct node*root=NULL;
do{
printf("\n1.insert\n2.delete\n3.view list\n4.search");
scanf("%d",&choice);
switch(choice)
{
case 1: printf("\nEnter the key and data :");
scanf("%d%d",&i,&j);
inserttoBST(&root,i,j);
break;
case 2: break;
case 3:break;
case 4:break;
default:printf("\nInvalid Entry");
}
}while(choice!=10);
}
void inserttoBST(struct node**root,int keys,int val)
{
if(*root==NULL)
{
struct node*nodes=(struct node*)malloc(sizeof(struct node));
nodes->key=key;
nodes->val=val;
nodes->left=nodes->right=NULL;
*root=nodes;
}
else if((*root)->key<keys)
inserttoBST((*root)->right,int keys,int val);
else inserttoBST((*root)->left,int keys,int val);
}
最佳答案
第一个问题是struct node
不是在使用它的第一个点声明的。
您需要将定义从main
移到inserttoBST
原型之前。
这是代码遇到的许多问题中的第一个,您还需要看看:
去掉conio.h
,它不是标准头。
包括stdlib
,因为这是malloc
所需要的。
找出关键变量应该是key
还是keys
。
找出您的值结构字段应该是val
还是value
。
从对int
的调用中去掉inserttoBST
类型说明符。
将正确的值作为第一个参数传递给inserttoBST
,特别是像&((*root)->leftOrRight)
这样的参数。
对于主函数使用int main (void)
,这是标准特别允许的两个规范变体之一。
这就是我要做的一切,让它编译,是否足以消除任何逻辑错误,我不能说。
但是,一旦你要编译它,那将是你需要采取的下一步。