OJ-二叉搜索树的建立及遍历

 

 

题目描述:

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

输入:

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

输出:

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

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<malloc.h>
  4 #define M 100
  5  
  6 typedef struct Btnode
  7 {
  8     struct Btnode *lchild;
  9     struct Btnode *rchild;
 10     int data;
 11 }btnode,*pnode;
 12  
 13  
 14 pnode insertBt(pnode p,int data)
 15 {
 16     if(p==NULL)
 17     {
 18         p=(pnode)malloc(sizeof(btnode));
 19         if(p==NULL)
 20         {
 21             printf("out of space!\n");
 22             exit(0);
 23         }
 24         p->data=data;
 25         p->lchild=NULL;
 26         p->rchild=NULL;
 27     }else if(data>p->data)
 28         p->rchild=insertBt(p->rchild,data);
 29     else if(data<p->data)
 30         p->lchild=insertBt(p->lchild,data);
 31      
 32         return p;
 33      
 34 }
 35  
 36  
 37  
 38 void preorder(pnode p)
 39 {
 40     if(p)
 41     {
 42         printf("%d ",p->data);
 43         preorder(p->lchild);
 44         preorder(p->rchild);
 45     }
 46 }
 47 void inorder(pnode p)
 48 {
 49     if(p)
 50     {
 51         inorder(p->lchild);
 52         printf("%d ",p->data);       
 53         inorder(p->rchild);
 54     }
 55 }
 56 void postorder(pnode p)
 57 {
 58     if(p)
 59     {
 60         postorder(p->lchild);
 61         postorder(p->rchild);
 62         printf("%d ",p->data);
 63     }
 64 }
 65 void freeAll(pnode p)
 66 {
 67     if(p->lchild==NULL&&p->rchild==NULL)
 68     {
 69         free(p);
 70         return ;
 71     }
 72      if(p->lchild)
 73         freeAll(p->lchild);
 74      if(p->rchild)
 75         freeAll(p->rchild);
 76 }
 77 int main()
 78 {
 79     int n=0,a[M];
 80     int i=0;
 81     pnode p=NULL;
 82     while((scanf("%d",&n))!=EOF)
 83     {
 84         for(i=0;i<n;i++)
 85         {
 86             scanf("%d",&a[i]);
 87             p=insertBt(p,a[i]);
 88         }
 89         preorder(p);
 90         printf("\n");
 91         inorder(p);
 92         printf("\n");
 93         postorder(p);
 94         printf("\n");
 95         freeAll(p);
 96         p=NULL;
 97     }
 98     return 0;
 99 }
100  
101 /**************************************************************
102     Problem: 1201
103     User: 
104     Language: C++
105     Result: Accepted
106     Time:50 ms
107     Memory:1944 kb
108 ****************************************************************/

 

posted @ 2014-03-04 19:55  守静居士  阅读(201)  评论(0编辑  收藏  举报