USTC2015-3二叉树的层序遍历输出

树的奇数层遍历算法

3.每行输入树的父节点和左右孩子节点

输出树的层次遍历的奇数层的所有结点(根为第1层)。
原 样例输入和样例输出

从 input_3.txt 输入
输入格式:
A B C
B E
C F G
输出到 output_3.txt:
输出格式:
第 1 层结点:A
第 3 层结点:E,F,G

样例输入输出2

从 input_3.txt 输入
输入格式:

A B C
B D E
D H
E I J
I K
C F G

输出到 output_3.txt:

输出格式:

第1层节点:A
第3层节点:D,E,F,G
第5层节点:K

 

 

设计思路:利用简单的字符自动机,处理节点间关系,直接对节点的层序遍历层数进行赋值,然后遍历输出

代码:

#include<cstdio>
int main()
{
    FILE *fp = fopen("input3.txt","r+");
    int m[128] = {0};
    char ch;
    int k = 1;
    int n = 1;
    fscanf(fp,"%c",&ch);
    m[ch] = k;
    k++;
    int hs[27] = {0};
    while(1)
    {
        int g = fscanf(fp,"%c",&ch);
        if(g == EOF)
        {
            break;
        }
        if(ch == ' ') {continue;}
        if(ch == '\n')
        {
            fscanf(fp,"%c",&ch);
            k = m[ch] + 1 ;
            if(k > n) n = k + 1;
            continue;
        }
        if(m[ch] == 0)
        {
            m[ch] = k;
        }
    }
    for(char j = 'A';j <= 'Z';j++)
    {
        hs[m[j]]++;
    }
    fp = fopen("ouput4.txt","a");
    for(int i = 1;i <= n;i += 2)
    {
        fprintf(fp,"第%d层节点:",i);
        for(char j = 'A';j <= 'Z';j++)
        {
            if(m[j] == i)
            {
                --hs[i];
                fprintf(fp,"%c",j);
                if(hs[i] != 0) fprintf(fp,",");
            }
        }
        if(i != n-1 &&i != n ) fprintf(fp,"\n");
    }
    return 0;
}

附记:本程序还适用于处理树,森林的层序遍历,无向图的广度优先搜索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值