您的位置:首页 > 其它

UVA11234 - Expressions

2012-11-18 11:30 447 查看
这个又是放了好久才做的题,最近刚学到二叉树,对遍历熟悉了以后,发现给出的第一的入栈序列正着读的话不是正经的后序遍历,

但是,如果反过来去读的话,你会发现这是一个标准的先序遍历,(不知有多少人发现了这个规律)

故,我是反序读入建树的,这样就省了调用栈,也省不少用时。

这个问题,解决了以后,bfs是我最大的障碍,自学了bfs以后我才把这道题A掉的。

代码如下:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
struct node{
char data;
node *lnode, *rnode;
};
int length;
char s[10010];
node* queue[10010];
void input(char ch,node *&L)
{
L = (node*)malloc(sizeof(node));
L->data = ch;
if(ch>='a'&&ch<='z')
{
L->lnode = L->rnode = NULL;
return;
}
else
{
input(s[--length],L->lnode);
input(s[--length],L->rnode);
}
}
void bfs(node *l)
{
int front = 0, rear = 1, count = 0;
queue[front] = l;
while(front<rear)
{
if(queue[front]->rnode)queue[rear++] = queue[front]->rnode;
if(queue[front]->lnode)queue[rear++] = queue[front]->lnode;
s[count++] = queue[front++]->data;
}
for(int i=count-1; i>=0; i--)
cout<<s[i];
cout<<endl;
}
int main ()
{
int t;
node *l;
cin>>t;cin.ignore();
while(t--)
{
gets(s);//cout<<s<<endl;
for(length = 0;s[length];length++);
input(s[--length],l);
bfs(l);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: