zoukankan      html  css  js  c++  java
  • 03-树2 List Leaves (25 分)

    Given a tree, you are supposed to list all the leaves in the order of top down, and left to right.

    Input Specification:

    Each input file contains one test case. For each case, the first line gives a positive integer N (≤) which is the total number of nodes in the tree -- and hence the nodes are numbered from 0 to N1. Then N lines follow, each corresponds to a node, and gives the indices of the left and right children of the node. If the child does not exist, a "-" will be put at the position. Any pair of children are separated by a space.

    Output Specification:

    For each test case, print in one line all the leaves' indices in the order of top down, and left to right. There must be exactly one space between any adjacent numbers, and no extra space at the end of the line.

    Sample Input:

    8
    1 -
    - -
    0 -
    2 7
    - -
    - -
    5 -
    4 6
    

    Sample Output:

    4 1 5
    #include<cstdio>
    #include<queue>
    using namespace std;
    const int maxn = 15;
    struct Node{
        int lchild,rchild;
    }node[maxn];
    
    int num = 0;
    bool isRoot[maxn]; 
    
    int change(char c){
        if(c == '-') return -1;
        else{
            isRoot[c-'0'] = false;
            return c-'0';
        }
    }
    
    void print(int v){
        if(num == 0){
            printf("%d",v);
            num++;
        }else{
            printf(" %d",v);
        }
    }
    
    void BFS(int root){
        int front = -1,rear = -1;
        int q[maxn];
        q[++front] = root;
        while(front!= rear){
            int now = q[++rear];
            if(node[now].lchild == -1 && node[now].rchild == -1) print(now);
            if(node[now].lchild != -1) q[++front] = node[now].lchild;
            if(node[now].rchild != -1) q[++front] = node[now].rchild;
        }
    //    queue<int> q;
    //    q.push(root);
    //    while(!q.empty()){
    //        int now = q.front();
    //        q.pop();
    //        if(node[now].lchild==-1&&node[now].rchild==-1)
    //            print(now);
    //        if(node[now].lchild != -1)
    //            q.push(node[now].lchild);
    //        if(node[now].rchild != -1)
    //            q.push(node[now].rchild);                                              
    //    }
    }
    
    int main(){
        int n;
        scanf("%d",&n);
        for(int i = 0; i < n; i++){
            isRoot[i] = true;
        }
        for(int i = 0; i < n; i++){
            char a,b;
            getchar();
            scanf("%c %c",&a,&b);
            node[i].lchild = change(a);
            node[i].rchild = change(b);
        }
        int root;
        for(int i = 0; i < n; i++){
            if(isRoot[i] == true){
                root = i;
                break;
            }
        }
        BFS(root);
        return 0;
    }
  • 相关阅读:
    webpack4.x 入门一篇足矣
    面试精选之Promise
    六月前端知识集锦(每月不可错过的文章集锦)
    SpringBoot整合MyBatis与MySql8.0
    tomcat报错:This is very likely to create a memory leak问题解决
    配置tomcat服务器内存大小中的Xms、Xmx、PermSize、MaxPermSize 详解
    不用FTP,直接Windows与Linux下互传文件
    SpringBoot项目单元测试
    web.xml 中的listener、 filter、servlet 加载顺序及其详解
    linux下重启weblogic(关闭和启动)
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/10665679.html
Copyright © 2011-2022 走看看