poj2255解題報告~

1.算法
本題是給出一個樹的先序和中序,輸出它的後序。可以通過遞歸實現。
舉例說明
先序:DBACEGF 中序:ABCDEFG
(1)把整個7個字符作爲一段,根據先序找出第一個根D,根據中序可以得出,D左邊爲ABC,右邊爲EFG。
(2)對D兩邊遞歸進行(1)操作。
(3)遞歸的終止條件是這一段中只有一個字符(即爲葉結點)
根據以上可以步驟可以生成一棵樹,然後遞歸輸出後序。
ps:
後來發現可以不用生成樹的結構,直接遞歸完成,即在生成樹的遞歸函數中進行後序輸出。
2.實現
(1)對於沒有給定行的輸入可以用 while(cin>>str1>>str2)進行判斷,對於如何用scanf函數判斷有待解決
(2)不知道爲什麼我的程序在c++環境中可以成功運行,而在g++環境中發生Output Limit Exceeded的錯誤,有待解決
3.代碼

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;

char str1[26],str2[26];

void func(int p,int q,int len);
int main()
{
int len=0;
while(cin>>str1>>str2)
{
len=strlen(str1);
func(0,0,len);
printf("\n");
}
return 0;
}
void func(int p,int q,int len)
{
if(len==1)
{
printf("%c",str1[p]);
return;
}
int x=q;
while(str2[x]!=str1[p])x++;
int len1=x-q;
int len2=len-(1+x-q);

if(len1>0)func(p+1,q,len1);
if(len2>0)func(p+1+len1,x+1,len2);
printf("%c",str2[x]);
}
發佈了21 篇原創文章 · 獲贊 1 · 訪問量 1039
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章