题目描述:

题目思路:

1.用结构链表来建树

2.用队列来实现层次遍历,当遍历到根节点时,将其子节点压入队列

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <vector>
  5. #include <queue>
  6. using namespace std;
  7.  
  8. //树结点
  9. struct Node{
  10. int v ;
  11. Node* left,*right ;
  12. int have_value ;
  13. Node():have_value(false),left(NULL),right(NULL){} ;
  14. } ;
  15.  
  16. Node* root ;//根节点
  17.  
  18. Node* newnode(){
  19. return new Node() ; //返回一个新结点
  20. }
  21.  
  22. bool failed ;
  23.  
  24. void addnode(int v,char* s){//添加新结点
  25. int n = strlen(s);
  26. Node* u = root ;
  27. for(int i = ;i < n;i++)//找到要加入的位置
  28. {
  29. if(s[i] == 'L'){
  30. if(u->left == NULL) u->left = newnode();
  31. u = u->left;
  32. }
  33. else if(s[i] == 'R'){
  34. if(u->right == NULL) u->right= newnode();
  35. u = u->right ;
  36. }
  37. }
  38. if(u->have_value) failed = true ;//是否已经被访问过;
  39. u->v = v;
  40. u->have_value = true;
  41. }
  42.  
  43. void freetree(Node* u){ //释放内存
  44. if(u == NULL) return ;
  45. freetree(u->left);
  46. freetree(u->right);
  47. delete u;
  48. }
  49.  
  50. char s[];
  51. bool read_input(){
  52. failed = false ;
  53. freetree(root) ;
  54. root = newnode();
  55. while(true){
  56. if(scanf("%s", s) != ) return false;
  57. if(!strcmp(s,"()")) break;
  58. int v ;
  59. sscanf(&s[],"%d",&v);
  60. addnode(v,strchr(s,',')+);
  61. }
  62. return true ;
  63. }
  64.  
  65. bool bfs(vector<int>& ans){//搜索
  66. queue<Node*> q;
  67. ans.clear();
  68. q.push(root);
  69. while(!q.empty()){
  70. Node *u = q.front();q.pop();
  71. if(!u->have_value) return false;
  72. ans.push_back(u->v);
  73. if(u->left != NULL) q.push(u->left);
  74. if(u->right != NULL) q.push(u->right);
  75. }
  76. return true ;
  77. }
  78.  
  79. int main(int argc, char *argv[])
  80. {
  81. vector<int> ans;
  82. while(read_input()){
  83. if(!bfs(ans)) failed = ;
  84. if(failed) printf("not complete\n");
  85. else{
  86. for(int i = ;i < ans.size();i++)
  87. {
  88. if(i != ) cout << " " ;
  89. cout << ans[i];
  90. }
  91. cout << endl ;
  92. }
  93. }
  94. return ;
  95. }

树的层次遍历(Trees on the level,UVA 122)的更多相关文章

  1. Uva 122 树的层次遍历 Trees on the level lrj白书 p149

    是否可以把树上结点的编号,然后把二叉树存储在数组中呢?很遗憾如果结点在一条链上,那将是2^256个结点 所以需要采用动态结构 首先要读取结点,建立二叉树addnode()+read_input()承担 ...

  2. Trees on the level UVA - 122 复习二叉树建立过程,bfs,queue,strchr,sscanf的使用。

    Trees are fundamental in many branches of computer science (Pun definitely intended). Current state- ...

  3. Trees on the level UVA - 122 (二叉树的层次遍历)

    题目链接:https://vjudge.net/problem/UVA-122 题目大意:输入一颗二叉树,你的任务是按从上到下,从左到右的顺序输出各个结点的值.每个结点都按照从根节点到它的移动序列给出 ...

  4. UVa 122 (二叉树的层次遍历) Trees on the level

    题意: 输入一颗二叉树,按照(左右左右, 节点的值)的格式.然后从上到下从左到右依次输出各个节点的值,如果一个节点没有赋值或者多次赋值,则输出“not complete” 一.指针方式实现二叉树 首先 ...

  5. Trees on the level UVA - 122

    Trees are fundamental in many branches of computer science (Pun definitely intended). Current stateo ...

  6. 【紫书】Trees on the level UVA - 122 动态建树及bfs

    题意:给你一些字符串,代表某个值被插入树中的位置.让你输出层序遍历. 题解:动态建树. 由于输入复杂,将输入封装成read_input.注意输入函数返回的情况 再将申请新节点封装成newnode(). ...

  7. [Swift]LeetCode103. 二叉树的锯齿形层次遍历 | Binary Tree Zigzag Level Order Traversal

    Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...

  8. [Swift]LeetCode107. 二叉树的层次遍历 II | Binary Tree Level Order Traversal II

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  9. 二叉树的锯齿形层次遍历 · Binary Tree Zigzag Level Order Traversal

    [抄题]: 给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) [思维问题]: 不知道反复切换要怎么做:用boolean normalOrder当作布尔型 ...

随机推荐

  1. HDU 2036 改革春风吹满地 (求多边形面积)

    传送门: 改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  2. NSLog的各种打印格式符 和 打印CGRect时用NSStringFromCGRect

    打印CGRect时用NSStringFromCGRect 转载自:http://blog.csdn.net/chenyong05314/article/details/8219270 1. 打印CG开 ...

  3. Vue 父子组件传值 props

    1.Vue 的渲染周期: vue 如何实现响应式追踪. 父子组件通信有很多方式,今天单独聊下props 的方式.我们通过查找官方文档很容发现,props传值有静态和动态两种传值方式. 当然props ...

  4. 使你的ActiveX控件执行时不弹出安全性提示(转载)

    我们编写一个ActiveX控件在IE中运行,一般会弹出一个安全提示,如何避免这种情况?下面是我在参考前人的文章后,总结出“在浏览器中执行时不弹出警告的ActiveX控件”的两种编写方法,予以备忘.注意 ...

  5. python 爬虫简介以及使用方法

    阶段大纲: 一. 爬虫 1. 基本操作 - 登录任意网站(伪造浏览器的任何行为) 2. 性能相关 - 并发方案: - 异步IO: gevent/Twisted/asyncio/aiohttp - 自定 ...

  6. jdk8新特性之双冒号 :: 用法及详解

    jdk8的新特性有很多,最亮眼的当属函数式编程的语法糖,本文主要讲解下双冒号::的用法. 概念 类名::方法名,相当于对这个方法闭包的引用,类似js中的一个function.比如: Function& ...

  7. 微信小程序新版用户授权方式处理

    最新更新(2018-12-27): 最近做了改版,做成默认进来就是首页,然后去判断有没有用户信息,没有的话再去判断用没授权过,如果授权过直接自动去获取,没有的话再跳转到授权页面.因为用户授权主要就是针 ...

  8. LeetCode 中级 - 优势洗牌(870)

    给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述. 返回 A 的任意排列,使其相对于 B 的优势最大化. 示例 2: 输入: ...

  9. 学习笔记 - 中国剩余定理&扩展中国剩余定理

    中国剩余定理&扩展中国剩余定理 NOIP考完回机房填坑 ◌ 中国剩余定理 处理一类相较扩展中国剩余定理更特殊的问题: 在这里要求 对于任意i,j(i≠j),gcd(mi,mj)=1 (就是互素 ...

  10. Dubbo 改造普通单体项目

    一.新建普通maven项目 1.首先,新建3个普通maven商城项目,模拟以往常见的Java单体应用开发,mall-interface是存放接口和公共代码部分,order-service-consum ...