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

来源:互联网 发布:mysql 命令 编辑:程序博客网 时间:2024/06/01 10:50

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

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

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

输出

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

示例输入

1221 20

示例输出

21 20

提示

 

来源

 赵利强

示例程序

 

  • 提交 
  • 状态

 

#include <stdio.h>#include <stdlib.h>typedef struct tree{    int data;    struct tree *l,*r;}tree;int i;tree *creat(tree *t,int e){    if(t==NULL)    {        t=(tree *)malloc(sizeof(struct tree));        t->data=e;        t->l=NULL;        t->r=NULL;    }    else    {    if(e<t->data)t->l=creat(t->l,e);    else t->r=creat(t->r,e);    }    return t;}void zhongxu(tree *t){    if(t)    {        zhongxu(t->l);        i++;        if(i==1)        printf("%d",t->data);        else            printf(" %d",t->data);        zhongxu(t->r);    }}int main(){    int n,k,e;     tree *t;    while(scanf("%d",&n)!=EOF)    {        t=NULL;        i=0;        for(k=0;k<n;k++)        {            scanf("%d",&e);            t=creat(t,e);        }        zhongxu(t);        printf("\n");    }    return 0;}


 

0 0