我编写了一个C程序来输入二进制搜索树的元素,并显示其顺序遍历、后序遍历和前序遍历。

#include<stdio.h>
#include<stdlib.h>
struct tnode
{
    int data;
    struct tnode *leftc;
    struct tnode *rightc;
};
int main()
{
    char ans='N';
    struct tnode *new_node,*root;
    //  struct tnode *get_node();
    root=NULL;
    do{
        // new_node=get_node();
        printf("\nEnter the Element");
        scanf("%d",&new_node->data);
        if(root==NULL)
            root=new_node;
        else
            insert(root,new_node);
        printf("\nDo you want to enter a new element?(y/n)");
        scanf("%c",&ans);
    }while(ans == 'y');
    printf("Inorder traversal:the elements in the tree are");
    inorder(root);
    printf("\nPreorder traversal:the elements in the tree are");
    preorder(root);
    printf("Postorder traversal:the elements in the tree are");
    postorder(root);
    return 0;
}
void insert(struct tnode ** tree,int num)
{
    struct tnode *temp = NULL;
    if(!(*tree))
    {
        temp=(struct tnode *)malloc(sizeof (struct tnode));
        temp->leftc=temp->rightc=NULL;
        temp->data=num;
        *tree=temp;
        return;
    }
    if(num < (*tree)->data)
    {
        insert(&(*tree)->leftc,num);
    }
    else if(num > (*tree)->data)
    {
        insert(&(*tree)->rightc,num);
    }
}
void preorder(struct tnode * s)
{
    if(s)
    {
        printf("%d\n",s->data);
        preorder(s->leftc);
        preorder(s->rightc);
    }
}
void inorder(struct tnode * s)
{
    if(s)
    {
        inorder(s->leftc);
        printf("%d\n",s->data);
        inorder(s->rightc);
    }
}
void postorder(struct tnode * s)
{
    if(s)
    {
        postorder(s->leftc);
        postorder(s->rightc);
        printf("%d\n",s->data);
    }
}

我收到这些警告信息:
warning: implicit declaration of functionS,
conflicting types OF FUNCTIONS,
new_node’ may be used uninitialized in this function

我不明白这些错误。你能帮我修一下吗?

最佳答案

在C语言中,为了使用函数,您需要在主函数之前声明em,就像在您的示例中一样,您应该编写:

void insert(struct tnode ** tree,int num);
//all declarations of other functions here .

//顺便说一句,您可以声明em而不必使用如下变量的名称:
void insert(struct tnode ** , int );

也可以试着用C语言搜索二叉树。
有很多网站显示了你正在寻找的答案,也有很多网站提供了教程来解释周围的一切。
附笔
如果不想在main函数之前声明函数,可以将main函数的上部的ready函数放在末尾的底部。

关于c - 有序,前序和后序遍历,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38376343/

10-09 01:25