对于 c 中的给定代码,无法将节点**转换为节点**错误

cannot convert node** to node** error for this given code in c

我得到了给定代码的 "cannot convert node** to node** error"。 这里都是节点**。 将函数 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,不是标准的header。
  • 包括 stdlib 因为 malloc.
  • 需要它
  • 确定您的关键变量应该是 key 还是 keys
  • 确定您的值结构字段应该是 val 还是 value
  • 调用 inserttoBST.
  • 中删除 int 类型说明符
  • 将正确的值作为第一个参数传递给 inserttoBST,特别是 &((*root)->leftOrRight).
  • 对主要功能使用 int main (void),这是标准特别允许的两个规范变体之一。

这就是我为了编译而必须做的一切,这是否足以消除我不能说的任何逻辑错误。

但是,一旦您完成编译,这就是您需要采取的下一步。