解题思路:
注意事项:
参考代码:
/* ...|-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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复