zoukankan      html  css  js  c++  java
  • UVa 122 Trees on the level

    题意:给出一棵二叉树,按照从上到下,从左到右输出所有节点的值,如果有一个节点没有赋值或者被多次赋值则输出not complete

    看的紫书照着敲的= = 先要将输入进来的值建成一颗二叉树(定义一个二叉树的节点,新建节点的函数,添加节点的函数),再对建好的二叉树遍历(BFS)

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath>  
     5 #include<vector> 
     6 #include<queue>
     7 #include<algorithm>  
     8 using namespace std;
     9 
    10 typedef long long LL;
    11 const int maxn=10000+5;
    12 char s[maxn];
    13 int failed;
    14 vector<int> ans;
    15 
    16 struct Node{ //建立二叉树的一个结点 
    17     bool have_value;//判断该结点是否被赋值过 
    18     int v;
    19     Node *left,*right;
    20     Node():have_value(false),left(NULL),right(NULL){}//构造函数,即为赋初值 
    21 };
    22 
    23 Node*root;
    24 Node* newnode() { //创建一个新的结点 
    25     return new Node();
    26 }
    27 
    28 void addnode(int v,char *s){ //添加一个新的 结点 
    29     int n=strlen(s);
    30     Node* u=root;
    31     for(int i=0;i<n;i++)
    32     if(s[i]=='L'){
    33         if(u->left==NULL) u->left=newnode();//如果左边的结点不存在,建立新的结点 
    34         u=u->left; //向左走 
    35     }
    36     else if(s[i]=='R'){
    37         if(u->right==NULL) u->right=newnode();//如果右边的结点不存在,建立新的结点 
    38         u=u->right;//向右走 
    39     }
    40     if(u->have_value) failed=true; //如果已经赋过值 ,输入有误 
    41     u->v=v;//标记 
    42     u->have_value=true;    
    43 }
    44 
    45 bool read_input(){
    46     failed=false;
    47     root=newnode();
    48     for(;;){
    49         if(scanf("%s",&s)!=1) return false;
    50         if(!strcmp(s,"()")) break;
    51         int v;
    52         sscanf(&s[1],"%d",&v);
    53         addnode(v,strchr(s,',')+1);
    54     }
    55     return true;
    56 }
    57 
    58 
    59 
    60 
    61 bool bfs(vector<int>& ans){
    62     queue<Node*> q;
    63     ans.clear();
    64     q.push(root);
    65     while(!q.empty()){
    66         Node* u=q.front();q.pop();
    67         if(!u->have_value) return false;//有结点没有被赋值,输出有误 
    68         ans.push_back(u->v);//增加到输出序列尾部 
    69         if(u->left!=NULL) q.push(u->left);//如果存在左子结点,放进队列 
    70         if(u->right!=NULL) q.push(u->right);//    如果存在右子结点,放进队列
    71     }
    72     return true;
    73 }
    74 
    75 int main()
    76 {
    77     int i;
    78     while(read_input()){
    79         if(failed||!bfs(ans)) printf("not complete
    ");
    80         else{
    81             for(i=0;i<ans.size()-1;i++)
    82             printf("%d ",ans[i]);
    83             printf("%d
    ",ans[i]);                    
    84         }
    85     }
    86     return 0;    
    87 }
    View Code

    数据结构学得好艰辛啊啊啊啊啊= =

  • 相关阅读:
    git基础教程(三)
    Struts2_day04
    Struts2_day03
    Struts2_day02
    Struts2_day01
    Spring 学习02
    Spring 学习01
    Kafka 温故(五):Kafka的消费编程模型
    Kafka 温故(四):Kafka的安装
    Kafka 温故(三):Kafka的内部机制深入(持久化,分布式,通讯协议)
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4324629.html
Copyright © 2011-2022 走看看