树结构练习——排序二叉树的中序遍历

来源:互联网 发布:apache httppost 编辑:程序博客网 时间:2024/06/15 04:50

题目描述

在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。
 

输入

输入包含多组数据,每组数据格式如下。
第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。

输出

为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。
 

示例输入

1221 20

示例输出

21 20

提示

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
  int data;
  struct node*l,*r;
};
int mid[1500],k;
struct node*insert(struct node*t,int x)
{
    if(t==NULL)
    {
       t=(struct node*)malloc(sizeof(struct node));
       t->data=x;
       t->l=NULL;
       t->r=NULL;
    }
    else if(x<t->data)
    {
       t->l=insert(t->l,x);
    }
    else
        t->r=insert(t->r,x);
    return t;

}
struct node*creat(int a[],int n)
{
   struct node*t=NULL;
   int j=0;
   while(j<n)
   {
      t=insert(t,a[j]);
      j++;
   }
   return t;
}
void inorder(struct node*t)
{
  if(t)
  {
     inorder(t->l);
     mid[k++]=t->data;
     inorder(t->r);
  }
}
int main()
{
    int n,i,a[1500];
    struct node*t;
    while(~scanf("%d",&n))
    { memset(mid,0,sizeof(mid));
      for(i=0;i<=n-1;i++)
      {
          scanf("%d",&a[i]);
      }
      t=creat(a,n);
      k=0;
      inorder(t);
      for(i=0;i<=k-1;i++)
      {
          if(i==k-1)
            printf("%d",mid[k-1]);
          else printf("%d ",mid[i]);
      }
      printf("\n");
    }
    return 0;
}

 

0 0