解题思路:
注意事项:
参考代码:
/*
...|-12
10-|
...|-8-|
.......|...|-7
.......|-5-|
...........|-4
*/
#include<stdio.h>
#define maxn 110
char str[110][1000];
int cnt=1;
struct Node{
int data;
int lson,rson;
int num;
int p;
int v;//垂直方向上的位置
Node()
{
data=-1;
lson=-1;
rson=-1;
num=-1;
p=-1;
v=-1;
}
Node(int _data,int _lson,int _rson,int _num,int _p)
{
data=_data;
lson=_lson;
rson=_rson;
num=_num;
p=_p;
v=-1;
}
}tree[maxn];
int n=0;
void build_tree(int root,int data,int num)
{
if(data<tree[root].data)
{
if(tree[root].lson!=-1) build_tree(tree[root].lson,data,num);
else
{
tree[root].lson=num;
tree[num].data=data;
tree[num].lson=tree[num].rson=-1;
tree[num].num=num;
tree[num].p=-1;
}
}
else if(data>tree[root].data)
{
if(tree[root].rson!=-1) build_tree(tree[root].rson,data,num);
else
{
tree[root].rson=num;
tree[num].data=data;
tree[num].lson=tree[num].rson=-1;
tree[num].num=num;
tree[num].p=-1;
}
}
}
int len(int x)
{
int sum=0;
if(x==0 ) return 1;
while(x)
{
sum++;
x/=10;
}
return sum;
}
void PT(int root,int L)
{
if(tree[root].rson!=-1) PT(tree[root].rson,L+len(tree[root].data)+(root==0?2:4)-1);
for(int i=0;i<L;i++) str[cnt][i]='.';
tree[root].v=cnt;
sprintf(str[cnt++]+L,"%s%d%s",(root==0?"":"|-"),tree[root].data,((tree[root].lson==-1&&tree[root].rson==-1)?"":"-|"));
if(tree[root].lson!=-1 || tree[root].rson!=-1) tree[root].p=L+len(tree[root].data)+(root==0?2:4)-1;
if(tree[root].lson!=-1) PT(tree[root].lson,L+len(tree[root].data)+(root==0?2:4)-1);
}
void Format(int root)
{
if(tree[root].lson==-1 && tree[root].rson==-1) return ;
if(tree[root].rson!=-1)
{
for(int i=tree[tree[root].rson].v+1;i<tree[root].v;i++) str[i][tree[root].p]='|';
Format(tree[root].rson);
}
if(tree[root].lson!=-1)
{
for(int i=tree[root].v+1;i<tree[tree[root].lson].v;i++) str[i][tree[root].p]='|';
Format(tree[root].lson);
}
}
int main(void)
{
int data;
scanf("%d",&data);
tree[0]=Node(data,-1,-1,n++,-1);
while(scanf("%d",&data)!=EOF)
{
build_tree(0,data,n++);
}
PT(0,0);
Format(0);
for(int i=1;i<cnt;i++) printf("%s\n",str[i]);
return 0;
}0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复