对于给定的代码,我得到“无法将节点**转换为节点**错误”。
这两个都是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),这是标准特别允许的两个规范变体之一。
这就是我要做的一切,让它编译,是否足以消除任何逻辑错误,我不能说。
但是,一旦你要编译它,那将是你需要采取的下一步。

08-07 04:15