POJ 2255 解題報告

2021-07-04 18:23:51 字數 1085 閱讀 5383

這道題是從前序和中序遍歷產生後序遍歷。已經做過多次,但是還是寫得很麻煩。主要糾結在遞迴找到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 真心不簡單 如下 ...