#include <iostream>
#include<cstdio>
using namespace std;
int m=0,k=0,n,c[100]={0},f=0,g;
typedef struct LNode
{
int data;
struct LNode *lchild,*rchild;
}LNode,*List;
void bl(List &T)//遍历后应该输出的数按顺序存入数组c中。
{
if(T)
{
bl(T->rchild);
c[f]=T->data;
printf("c[%d]=%d\n",f,c[f]);/* ********这条语句在VC和CB中跑的结果不一样******** */
f++;
bl(T->lchild);
}
}
void creat(List &T,int e)//创建树
{
if(!T)
{
LNode *S;
S=new LNode;
S->data=e;
S->lchild=S->rchild=NULL;
T=S;
}
else if(e>T->data)creat(T->rchild,e);
else if(e<T->data)creat(T->lchild,e);
}
List search1(List &T,int e)//查找树的节点,用m来记载节点的层数;即深度。
{
if((!T)||e==T->data)return T;
else if(T)
{
m++;
if(e>T->data)return search1(T->rchild,e);
if(e<T->data)return search1(T->lchild,e);
}
//return m;
}
int main()
{
int a[100],b[100],z[100],i,s,F,w,x;
LNode *Q;
while((scanf("%d",&n)!=EOF))
{
m=w=x=k=f=g=0,F=1;
Q=NULL;
Q=new LNode;
Q->lchild=Q->rchild=NULL;
//cin>>n;//cout<<'123'<<'\n';
if(n<0||n>100)break;
for(i=0;i<n;i++)
{
cin>>a
;
}
for(w=1; w<n; w++)
{
for(x=0; x<w; x++)
{
if(a
break;
//z[w]=a[w];
}
if(x==w)
{
z[F]=a[w];
F++;
}
}
z[0]=a[0];
for(i=0;i<F;i++)
{
creat(Q,z);
}
bl(Q);
for(i=0;i<F;i++)
{
search1(Q,c);//用数组b存储树的层数;即深度
b[k]=m;k++;
m=0;
}
for(i=0;i<F;i++)
{
for(g=0;g<4*(b-1);g++)
{
cout<<" ";
}
cout<<c<<endl;
g=0;
}
}
return 0;
}
/*
1725: 二叉查找树(Ⅱ)-文本显示
时间限制: 1 Sec 内存限制: 128 MB
提交: 425 解决: 204
[提交][状态][讨论版]
题目描述
本任务是在空二叉查找树的基础上,依次插入一些关键字,然后文本方式显示该树。要求树中不能有重复关键字。
输入
由多组数据 组成。
每组数据由两行组成。第一行是待插入关键字的数目n(1<=n<=100)。第2行是n个空格分开的正整数,值不超过100。
输出
对于每一组数据,显示对应的二叉查找树,相当于常规树形左旋90度。见样例。 注意每一层缩进为4,每一行行尾没有空格符号。
input data
6
4 2 1 5 3 6
output data
6
5
4
3
2
1
}*/