环境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
*/