您的位置:首页 > 其它

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

2016-08-11 15:55 274 查看


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



Time Limit: 1000MS Memory limit: 65536K


题目描述

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


输入

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


输出

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


示例输入

1
2
2
1 20



示例输出

2
1 20


提示

#include<bits/stdc++.h>

using namespace std;

typedef struct node

{

    int data;

    struct node *l;

    struct node *r;

} BinaryNode,*BinarySortTree;

char b[50];

int k;

void creatTree(BinarySortTree &T,int e)

{

    if(T==NULL)

    {

        T=new BinaryNode;

        T->data=e;

        T->l=NULL;

        T->r=NULL;

    }

    else

    {

        if(e<=T->data)

        {

            creatTree(T->l,e);

        }

        else

        {

            creatTree(T->r,e);

        }

    }

}

void first(BinarySortTree T)

{

    if(T)

    {

        b[k++]=T->data+'0';

        first(T->l);

        first(T->r);

    }

}

int flag;

void middle(BinarySortTree T)

{

    if(T)

    {

        middle(T->l);

        if(flag)

        {

            flag=0;

            cout<<T->data;

        }

        else

            cout<<" "<<T->data;

        middle(T->r);

    }

}

int main()

{

    int a[50],c[50];

    int n,e;

    while(cin>>n)

    {

        BinarySortTree T;

        T=NULL;

        if(n==0)

            break;

        else

        {

            k=0;

            for(int j=0; j<n; j++)

            {

                cin>>e;

                creatTree(T,e);

            }

            flag=1;

            middle(T);

            cout<<endl;

        }

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: