您的位置:首页 > 其它

UVA 11234 Expressions

2013-07-16 09:18 483 查看

UVA 11234 Expressions

题目看了好久才看懂。从字符串从后往前,一个个字符建二叉树,如果是大写字母就新建一个节点,如果是小写就返回,建好后,进行BFS把树输出即可。

在POJ上超时了。 很坑爹 时间复杂度为O(n), 不可能超时按理说, 应该是用了动态内存分配超时。
在UVA上顺利AC
#include <stdio.h>
#include <string.h>
#include <ctype.h>
typedef struct Tree
{
char data;
struct Tree *l;
struct Tree *r;
} bitree;

int t;
char sb[10005];
int len;
int head;
int rear;
struct Q
{
bitree *TT;
} q[10005];

void build(bitree *&T)
{
T = new(bitree);
if (isupper(sb[len]))
{
T -> data = sb[len --];
build(T -> l);
build(T -> r);
}
else
{
T -> data = sb[len --];
T -> l = NULL;
T -> r = NULL;
}
}

void bfs(bitree *T)
{
rear = 1;
head = 0;
q[head].TT = T;
while (head < rear)
{
bitree *Tl;
bitree *Tr;
Tr = q[head].TT -> r;
Tl = q[head].TT -> l;
if(Tr != NULL)
{
q[rear ++].TT = Tr;
}
if (Tl != NULL)
{
q[rear ++].TT = Tl;
}
head ++;
}
}
int main()
{
scanf("%d", &t);
getchar();
while (t --)
{
memset(q, 0, sizeof(q));
gets(sb);
len = strlen(sb) - 1;
bitree *T = NULL;
build(T);
bfs(T);
for (int i = head - 1; i >= 0; i --)
printf("%c", q[i].TT -> data);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM UVA