Description
在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。
Input
输入包含多组数据,每组数据格式如下。
第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。
Output
为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。
Sample
Input
1
2
2
1 20
Output
2
1 20
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef struct node
{
int data;
node *r,*l;
}Tree;
int n;
bool flag;
//用于输出时的判断
Tree* Insert(Tree *root,int x)
{
if(!root)
{
root = new Tree;
root->l = NULL;
root->r = NULL;
root->data = x;
}
else
{
if(x<root->data)
root->l = Insert(root->l,x);
else
root->r = Insert(root->r,x);
}
return root;
}
Tree* Creat()
{
Tree *root = NULL;
int x;
for(int i=0; i<n ;i++)
{
cin>>x;
root = Insert(root,x);
}
return root;
}
void Visit(Tree *root)
{
if(root)
{
if(!flag)
{
cout<<root->data;
flag = true;
}
else
cout<<' '<<root->data;
}
}
void Travel_mid(Tree *root)
{
if(root)
{
Travel_mid(root->l);
Visit(root);
Travel_mid(root->r);
}
}
int main()
{
ios::sync_with_stdio(false);
//提高输入,输出速度
Tree *root;
while(cin>>n)
{
flag = false;
root = Creat();
Travel_mid(root);
cout<<endl;
}
return 0;
}