九度OnlineJudge题目1201:二叉排序树

来源:互联网 发布:八音盒音乐制作软件 编辑:程序博客网 时间:2024/05/22 03:02

题目链接:http://ac.jobdu.com/problem.php?pid=1201

题目描述:

    输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。

输入:

    输入第一行包括一个整数n(1<=n<=100)。
    接下来的一行包括n个整数。

输出:

    可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。
    每种遍历结果输出一行。每行最后一个数据之后有一个空格。

样例输入:
51 6 5 9 8
样例输出:
1 6 5 9 8 1 5 6 8 9 5 8 9 6 1 
提示:

输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。

AC代码:

#include<stdio.h>struct Node{       Node *lchild;       Node *rchild;       int value;}tree[100];int loc;Node* Creat(){     tree[loc].lchild=tree[loc].rchild=NULL;     return &tree[loc++]; }void PreOrder(Node *p){     printf("%d ",p->value);     if(p->lchild!=NULL)     {         PreOrder(p->lchild);     }     if(p->rchild!=NULL)     {         PreOrder(p->rchild);     }    // printf("\n");}void InOrder(Node *p){     if(p->lchild!=NULL)     {         InOrder(p->lchild);     }     printf("%d ",p->value);     if(p->rchild!=NULL)     {         InOrder(p->rchild);     }     //printf("\n");}void PostOrder(Node *p){     if(p->lchild!=NULL)     {         PostOrder(p->lchild);     }     if(p->rchild!=NULL)     {         PostOrder(p->rchild);     }     printf("%d ",p->value);    // }Node* CreatTree(int x,Node* p){      if(p==NULL)      {          p=Creat();          p->value=x;          return p;      }else      if(x<p->value)      {          p->lchild=CreatTree(x,p->lchild);      }else      if(x>p->value)      {          p->rchild=CreatTree(x,p->rchild);      }      return p;}int main(){    int n;    while(scanf("%d",&n)!=EOF)    {       loc=0;        Node* root=NULL;        for(int i=0;i<n;i++)        {                int x;                scanf("%d",&x);                root=CreatTree(x,root);                        }        PreOrder(root);        printf("\n");        InOrder(root);        printf("\n");        PostOrder(root);        printf("\n");    }    return 0;}


 

 

0 0