博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树的层次遍历
阅读量:4696 次
发布时间:2019-06-09

本文共 1125 字,大约阅读时间需要 3 分钟。

题目:输入一棵二叉树,按照从上到下,从左到右的顺序输出该二叉树。

相邻节点之间用一个空格隔开,每棵树的输入用一对空括号()结束。

注意:如果从根到某个节点的路径上有的节点没有在输入中给出,或者给出超过一次,应当输出-1.节点个数不超过256

样例输入:

(11,LL) (7,LLL) (8,R) (5,) (4,L) (13,RL) (2,LLR) (1,RRR) (4,RR) ()

(3,L) (4,R) ()

样例输出:

5 4 8 11 13 4 7 2 1

-1

本题是UVA122原题,有需要的可以去UVA查看。

#include
#include
int check(int i,int *t){ while(i!=1){ i/=2; if(t[i]==0) return 1; } return 0;}int main(){ char s[7]; int t[300]; int i,flag,f,count=0; memset(t,0,sizeof(t)); while(1){ scanf("%s",s); if(s[0]=='('&&s[1]==')') break; int x=0; i=1; while(s[i]!=',') x=x*10+s[i++]-'0'; f=1; flag=0; if(s[++i]==')'){ if(t[1]==0) t[1]=x; else flag=1; } while(s[i]!=')'){ if(s[i++]=='L') f=f*2; else f=f*2+1; } if(t[f]!=0&&f!=1) flag=1; if(flag)break; t[f]=x; count=f>count?f:count; } if(!t[1])flag=1; for(i=1;i<=count;i++){ if(t[2*i]==0&&t[2*i+1]==0&&t[i]!=0) flag=check(i,t); if(flag)break; } if(!flag){ for(i=1;i<=count;i++){ if(t[i]!=0) printf("%d ",t[i]); } printf("\n"); } else printf("-1\n"); return 0;}

转载于:https://www.cnblogs.com/walkthehorizon/p/4388134.html

你可能感兴趣的文章
fatal: remote origin already exists.
查看>>
gridview 自定义value值
查看>>
2018二月实现计划成果及其三月规划
查看>>
类名.class和getClass()区别
查看>>
12/17面试题
查看>>
LeetCode 242. Valid Anagram
查看>>
JSP表单提交乱码
查看>>
如何适应现代雇佣关系
查看>>
团队项目(第五周)
查看>>
SQL 优化经验总结34条
查看>>
开源 视频会议 收藏
查看>>
核心J2EE模式 - 截取过滤器
查看>>
.net开源CMS
查看>>
JdbcTemplate
查看>>
第一次使用maven记录
查看>>
SharePoint服务器端对象模型 之 使用CAML进展数据查询
查看>>
Building Tablet PC Applications ROB JARRETT
查看>>
Adobe® Reader®.插件开发
查看>>
【POJ 3461】Oulipo
查看>>
Alpha 冲刺 (5/10)
查看>>