這道題是從前序和中序遍歷產生後序遍歷。已經做過多次,但是還是寫得很麻煩。主要糾結在遞迴找到root後應該寫在後序遍歷序列的什麼位置。無奈之下又記錄了後續遍歷的前後範圍。
但是實際上,這道題只要輸出就好了,所以可以在遞迴地調左子樹和右子樹之後直接輸出。這樣省了空間,看著也簡單。另外,c裡面指標可以做運算的,這意味著只需要改變指標到新的初始位置,並記錄長度即可(每次操作,中序遍歷和前序遍歷的序列長度必須是一樣的)。
具體見中的討論。
thestoryofsnow
2255
accepted
176k
0msc++
1565b
/*
id: thestor1
lang: c++
task: poj2255
*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
const int maxn = 30;
void buildpostorder(char preorder, int p1, int p2, char inorder, int i1, int i2, char postorder, int r1, int r2)
// printf("preorder[%d, %d]\n", p1, p2);
// for (int i = p1; i <= p2; ++i)
// // printf("\n");
// printf("inorder[%d, %d]\n", i1, i2);
// for (int i = i1; i <= i2; ++i)
// // printf("\n");
char root = preorder[p1];
for (int i = i1; i <= i2; ++i) }
}int main()
return 0;
}
poj2255解題報告
1.演算法 本題是給出乙個樹的先序和中序,輸出它的後序。可以通過遞迴實現。舉例說明 先序 dbacegf 中序 abcdefg 1 把整個7個字元作為一段,根據先序找出第乙個根d,根據中序可以得出,d左邊為abc,右邊為efg。2 對d兩邊遞迴進行 1 操作。3 遞迴的終止條件是這一段中只有乙個字元...
重建二叉樹POJ2255
給定一棵二叉樹的前序遍歷和中序遍歷的結果,求其後序遍歷。輸入輸入可能有多組,以eof結束。每組輸入包含兩個字串,分別為樹的前序遍歷和中序遍歷。每個字串中只包含大寫字母且互不重複。輸出對於每組輸入,用一行來輸出它後序遍歷結果。樣例輸入 dbacegf abcdefg bcad cbad 樣例輸出 ac...
poj解題報告 1328
不得不說,這題是讓我飽受折磨,畢竟第一次做貪心演算法,而且wa了好多次,幸好有學長的幫助,最終找到了問題所在,是在快排上是問題,double高位不可向int低位轉換,由於一開始強制轉換導致雖然樣例和其他的測試資料過了,但還是wa,現在改完了就對了,附上ac ps 這題通過率是22 真心不簡單 如下 ...