poj2255给定二叉树的前序和中序,输出后序
我的递归思维一直很差,潜意识里总是觉得这种思维不是真正的解决问题,所以,总是想用递推思维思考问题。
给定二叉树的前序和中序,输出后序是数据结构中的基本问题,我一直不敢上机实践,就怕自己做不出来。恰好今晚有两个战友,无聊之极,试一试,果断AC了,当然,这题poj的数据比较弱,我去了zoj,依然ac,估计水题没必要出强大数据吧。
期末要考《数据结构》这题给了我很大信心,真的!
很难想象,这是我poj的第206题,呵呵,今晚战胜了心魔,熬夜,值了!!!
贴一个poj上的递推代码,很漂亮。
#include <iostream>
#include <string>
using namespace std;
string f(string s1,string s2)
{
if(s1.length()==1) return s1;
else if(s1.length()==0) return "";
else
{
size_t m=s1.find(s2[0]);
return f(s1.substr(0,m),s2.substr(1,m))+f(s1.substr(m+1),s2.substr(m+1))+s2[0];
}
}
int main()
{
string s1,s2,s;//s1为preorder traversal s2为inorder traversal
while(cin>>s1>>s2)
{
s=f(s2,s1);
cout<<s<<endl;
}
return 0;
}
偷偷把我的代码放到最后,就不解释了吧。。。
/*
* File: main.cpp
* Author: lmm333
* Created on 2010年12月16日
*/
#include <iostream>
#include <string>
using namespace std;
char a[30],b[30];
void f(int a1,int b1,int a2,int b2){
int l,r,p2,i;
char p1=a[a1];
for(i=a2;i<=b2;i++){
if(b[i]==p1)break;
}
l=i-a2;
r=b2-i;
if(l==0);
else if(l==1)
put("%c",b[a2]);
else f(a1+1,i-1,a2,i-1);
if(r==0);
else if(r==1)
put("%c",b[i+1]);
else f(a1-a2+i+1,b1,i+1,b2);
put("%c",b[i]);
}
int main(){
int l;
while(scanf("%s%s",a,b)!=EOF){
l=strlen(a);
f(0,l-1,0,l-1);
puts("");
}
}