1. 程式人生 > >藍橋杯——FBI樹

藍橋杯——FBI樹

環境CodeBlocks17 OJ系統通過

// @CGQ 2018/11/22 時間緊迫沒怎麼寫註釋
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;

#define ElemType char
#define MAX 1025
#define Status int

typedef struct BiTNode
{
    ElemType data;
    struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

char Judge(char *str)
{
    if(str[0]=='\0')
    return '#';
    int b,f,i;
    b=f=i=0;
    for(int i=0;str[i+1]!='\0';i++)
    {
        if(str[i]==str[i+1])
        ;
        else
        {f=1;break;}
    }
    if(f==1)
    return 'F';
    else if(str[0]=='0')
    return 'B';
    else
    return 'I';
}

void PostOrderTraverse(BiTree T)
{
    if(T)
    {
        PostOrderTraverse(T->lchild);
        PostOrderTraverse(T->rchild);
        cout<<T->data;
    }
}

void CreateBiTree(BiTree &T, char * str)
{// 建立二叉樹
    char ch = Judge(str);
    if(ch == '#')
        T = NULL;
    else
    {
    char s1[1025],s2[1025];
    int i,j;
    if(strlen(str)>1)
    {
        for(i=0;i<int(strlen(str)/2);i++)
            s1[i]=str[i];
        s1[i]='\0';
        for(j=0;i<=strlen(str);j++,i++)
            s2[j]=str[i];
        s2[j]='\0';
    }
    else if(strlen(str)==1)
    {
        s1[0]=s2[0]='\0';
    }
    T = new BiTNode;
    T->data = ch;
    CreateBiTree(T->lchild,s1);
    CreateBiTree(T->rchild,s2);
    }
}

int main()
{
    char a[MAX];
    int n;
    BiTree T;
    cin>>n;
    scanf("%s",a);
    CreateBiTree(T,a);
    PostOrderTraverse(T);
    return 0;
}


/*
輸入
3
10001011
輸出
IBFBBBFIBFIIIFF
*/