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

来源:互联网 发布:iphone手机编程软件 编辑:程序博客网 时间:2024/06/06 03:22

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

Input
输入包含多组数据,每组数据格式如下。
第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。
Output
为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。

Example Input

1
2
2
1 20

Example Output

2
1 20

#include <stdio.h>#include <stdlib.h>int k=0;typedef struct node{    int date;    struct node *l,*r;}tree;tree *creat(tree *t,int x){    if(t==NULL)    {        t=(tree *)malloc(sizeof(tree));        t->date=x;        t->r=NULL;        t->l=NULL;        return t;    }    else    {        if(x<t->date)        {            t->l=creat(t->l,x);        }        else            t->r=creat(t->r,x);    }    return t;}void zhong(tree *t){    if(t)    {        zhong(t->l);        if(t->date!=0)        {            if(k==0)            printf("%d",t->date);            else            printf(" %d",t->date);            k++;        }        zhong(t->r);    }}int main(){    int n,l,i,x,m;    tree *t;    while(~scanf("%d",&n))    {        k=0;    t=(tree*)malloc(sizeof(tree));        while(n--)        {            scanf("%d",&x);            creat(t,x);        }        zhong(t);        printf("\n");    }    return 0;}/***************************************************User name: Result: AcceptedTake time: 0msTake Memory: 132KBSubmit time: 2017-02-09 20:38:41****************************************************/
0 0
原创粉丝点击