先将数据插入到一颗二叉树中,再中序遍历该树
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
struct data
{
int l,m,r;
}node[100090];
int add,ok=0;;
void insert(int c,int root)
{
if(c>node[root].m)//óò
{
if(node[root].r==-1)
{
node[root].r=add;
node[add].m=c;
add++;
}
else
{
insert(c,node[root].r);
}
}
else
{
if(node[root].l==-1)
{
node[root].l=add;
node[add].m=c;
add++;
}
else
{
insert(c,node[root].l);
}
}
}
void pre(int root)
{
if(node[root].m!=-1)
{
if(ok==1)
{
printf(" %d",node[root].m);
}
else
{
ok=1;
printf("%d",node[root].m);
}
}
if(node[root].l!=-1)
pre(node[root].l);
if(node[root].r!=-1)
pre(node[root].r);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
memset(node,-1,sizeof(node));
add=0;
ok=0;
int i,temp;
scanf("%d",&temp);
node[add++].m=temp;
for(i=1;i<n;i++)
{
scanf("%d",&temp);
insert(temp,0);
}
pre(0);
printf("\n");
}
}