不带强制转换的整数c指针

不带强制转换的整数c指针,c,tree,binary-tree,C,Tree,Binary Tree,我试图在一个节点数有限的主函数中创建一个扩展的二叉树 问题是康普利勒一直在展示 错误:从类型“int”分配给类型“struct node”时,类型不兼容 这是我的代码: #include <stdio.h> #include <stdlib.h> #define NULLitem (-1) typedef struct node * link; struct node { int item; link l; link r; } link

我试图在一个节点数有限的主函数中创建一个扩展的二叉树

问题是康普利勒一直在展示

错误:从类型“int”分配给类型“struct node”时,类型不兼容

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#define NULLitem (-1)

typedef struct node * link;
struct node {   
    int item;
    link l;
    link r;
}


link NEW (int item, link l, link r)
{
        link x = malloc(sizeof * x);
        x->item = item;
        x->l = l;
        x->r = r;
        return x;
}

void Tprint(link p, int indent)
{
    int i;
    if (p!=NULL){
        Tprint(p->r, indent+4);
        for(i=0; i<indent; i++)
            printf(" ");
        printf("%d\n", p->item);
        Tprint(p->l,indent+4);
    }
}

int main(void)
{
    link T, M, N, z, Root;
    z = NEW(NULLitem,NULL,NULL);
    Root->item = 6;
    T = NEW(5, NULL, NULL);
    Root->l = T;

    M = NEW(7, NULL, NULL);
    Root->r = M;
    M->l= NEW(NULLitem, NULL, NULL);
    M->r= NEW(9,z,z);

    N = NEW(2,z,z);
    T->l = N;
    T->r = NEW(NULLitem,NULL, NULL);

    Tprint(Root,3);
    return 0;
}
#包括
#包括
#定义空项(-1)
typedef结构节点*链接;
结构节点{
国际项目;
链路l;
链接r;
}
新链接(整数项、链接l、链接r)
{
链路x=malloc(sizeof*x);
x->item=项目;
x->l=l;
x->r=r;
返回x;
}
void Tprint(链接p,int缩进)
{
int i;
如果(p!=NULL){
Tprint(p->r,缩进+4);
对于(i=0;i项);
Tprint(p->l,缩进+4);
}
}
内部主(空)
{
链接T,M,N,z,根;
z=新(NULLitem,NULL,NULL);
根->项=6;
T=新的(5,空,空);
根->l=T;
M=新的(7,空,空);
根->r=M;
M->l=新建(NULLitem,NULL,NULL);
M->r=新的(9,z,z);
N=新的(2,z,z);
T->l=N;
T->r=NEW(NULL项,NULL,NULL);
Tprint(根,3);
返回0;
}
错误在第12行(编译器会说全部),“指针来自整数,不带强制转换”是一个警告,如果您在程序的第12行更正错误,该警告将消失

您实际上忘记了分号:

struct node {   int item;
                link l;
                link r;
        }
在大括号后写一个分号,您的程序应该如下所示:

#include <stdio.h>
#include <stdlib.h>
#define NULLitem (-1)

typedef struct node * link;
struct node {   int item;
                link l;
                link r;
        };


link NEW (int item, link l, link r){
        link x = malloc(sizeof * x);
        x->item = item;
        x->l = l;
        x->r = r;
        return x;
}


void Tprint(link p, int indent){
        int i;
        if (p!=NULL){
                Tprint(p->r, indent+4);
                for(i=0; i<indent; i++)
                        printf(" ");
                printf("%d\n", p->item);
                Tprint(p->l,indent+4);
        }
}

int main(void)
{
   link T, M, N, z, Root;
    z = NEW(NULLitem,NULL,NULL);
    Root->item = 6;
   T = NEW(5, NULL, NULL);
     Root->l = T;

   M = NEW(7, NULL, NULL);
   Root->r = M;
    M->l= NEW(NULLitem, NULL, NULL);
    M->r= NEW(9,z,z);

   N = NEW(2,z,z);
    T->l = N;
    T->r = NEW(NULLitem,NULL, NULL);

    Tprint(Root,3);
    return 0;
}

运行时没有任何错误。

从哪里获得错误?请编辑您的问题,以将这些位置显示为代码中的注释。此外,您从不使
指向任何位置,每当您取消引用该指针时,都会导致未定义的行为。
struct node{int item;link l;link r;}
固定格式
根->项=6-->
Root=NEW(6,NULL,NULL)非常感谢
           -1
       9
           -1
   7
       -1    6
       -1
   5
           -1
       2
           -1