Problem Description
在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。
Input
输入包含多组数据,每组数据格式如下。
第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。
Output
为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。
Example Input
1
2
2
1 20Example Output
2
1 20Hint
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int cnt;
int a[1001];
BiTree creat(BiTree T,int x){
if(!T){
T = new BiTNode;
T->data=x;
T->lchild=NULL;
T->rchild=NULL;
}
else{
if(x<T->data)
T->lchild=creat(T->lchild,x);
else
T->rchild=creat(T->rchild,x);
}
return T;
}
void inorder(BiTree T){
if(T){
inorder(T->lchild);
a[cnt++]=T->data;
inorder(T->rchild);
}
}
int main(){
int t,x,i;
while(cin>>t){
cnt=0;
BiTree T=NULL;
for(i=1;i<=t;i++){
cin>>x;
T=creat(T,x);
}
inorder(T);
for(i=0;i<cnt;i++){
if(i==0)
cout<<a[i];
else
cout<<" "<<a[i];
}
cout<<endl;
}
return 0;
}