c遍历中具有struct的二叉树

时间:2015-11-02 05:03:28

标签: c binary-tree

我收到这样的错误

  

第13行3 [错误]预期' =',',',&#39 ;;',' asm'或' 属性'   之前'。'令牌

请帮我解决这个问题

#include<stdio.h>
#include<stdlib.h>
typedef struct T
{
    int data;
    struct T *r,*l;
}t;
 struct stack
{
    t* a[100];
    int top;
}s1;
s1.top=-1;
void push(t* root)
{
    s1.a[++s1.top]=root;
}
t* pop()
{
    s1.a[s1.top--];
}

t* create(t *root,int ele)
{   
    //printf("\nits gion");
    if(root==NULL)
    {printf("\nits gion");
        root=malloc(sizeof(t));
        root->r=root->l=NULL;
        root->data=ele;
    }
    //printf("\nits gion");
        else if(ele<root->data)
    {
        root->l=create(root->l,ele);
    }
    else if(ele>root->data)
    {
        root->r=create(root->r,ele);
    }
        else
    printf("\nduplicate ");

    return root;
}
void





#include<stdio.h>
#include<stdlib.h>
typedef struct T
{
    int data;
    struct T *r,*l;
}t;
 struct stack
{
    t* a[100];
    int top;
}s1;
s1.top=-1;
void push(t* root)
{
    s1.a[++s1.top]=root;
}
t* pop()
{
    s1.a[s1.top--];
}

t* create(t *root,int ele)
{   
    //printf("\nits gion");
    if(root==NULL)
    {printf("\nits gion");
        root=malloc(sizeof(t));
        root->r=root->l=NULL;
        root->data=ele;
    }
    //printf("\nits gion");
        else if(ele<root->data)
    {
        root->l=create(root->l,ele);
    }
    else if(ele>root->data)
    {
        root->r=create(root->r,ele);
    }
        else
    printf("\nduplicate ");

    return root;
}
void mo(t * root)
{
    if(root->r==NULL)
    printf("%d",root->data);
    else
    mo(root->r);

}
void inorder(t* root)
{   while(1)
{
    while(root)
    {
        push(root);
        root=root->l;
    }
    root=pop();
    if(root==NULL) break;
    printf("%d",root->data);
    root=root->r;

}
}
void postorder(t* root)
{   if(root==NULL) return;
    else 
    {

        postorder(root->l);
        postorder(root->r);
            printf("%d",root->data);
    }
}
void preorder(t* root)
{   if(root==NULL) return;
    else 
    {
    printf("%d",root->data);
        preorder(root->l);

        preorder(root->r);

    }
}
void lo(t * root)
{
    if(root->l==NULL)
    printf("%d",root->data);
    else
    mo(root->l);

}
void search(t *root,int ele)
{    if(root==NULL)
    printf("not fnd");
    else if(ele==root->data) printf("\nele found");
    else if(ele<root->data)
    search(root->l,ele);
    else if(ele>root->data)
    search(root->r,ele);


}


void main()
{int ch,ele;
    t *root=NULL;
    do
    {
        printf("\n1.add 2.m 3.l 4.exit 5.search 6.preorder7.inorder 8.postorder");
        scanf("%d",&ch);
        if(ch==1) {scanf("%d",&ele);
        //printf("\nits gion");
        root=create(root,ele);}
        if(ch==2)
        mo(root);
        if(ch==3)lo(root);
        if(ch==5)
        {
            scanf("%d",&ele);
            search(root,ele);

        }
        if(ch==6) preorder(root);
        if(ch==7) inorder(root);
        if(ch==8) postorder(root);
    }while(ch!=4);
}

1 个答案:

答案 0 :(得分:1)

第13行的编译器错误是针对此代码的:

s1.top=-1;

不在函数内部。 C只编译并执行函数内部的代码 - 首先调用 main 函数。