參考了部落格上碼量不到50行的**,完成了這題的ac重構。感覺真的基礎很重要,這題其實是很簡單的一道樹的前中後序的題目。但是我之前練習的時候,都是用的自己總結的騷套路,雖然理解起來很直觀,但是用了動態陣列(vector),時間複雜度比較大。這題問題規模n=5e4,時間控制600ms,雖然已經ac了,但是執行時間也花了400ms。
當時考試的時候又是用vector又是建樹,所以最後乙個case沒過,丟了5分,很可惜。
#include #includeview code#include
#include
#include
#include
#include
#include
#include
#include
#define i scanf
#define ol puts
#define o printf
#define f(a,b,c) for(a=b;a#define ff(a,b) for(a=0;a#define fg(a,b) for(a=b-1;a>=0;a--)
#define len 50000
#define max 0x06ffffff
using
namespace
std;
intin
[len];
intpre[len];
intpost[len];
int t=0
;void setpost(int ps,int pe,int
is,int
ie);
intmain()
void setpost(int ps,int pe,int
is,int
ie)else
}
需要注意的點:
根據問題的規模和題目的條件,估計應該用什麼方法,越簡單越好,題目不涉及的邊界條件就不要去管了。
需要拓展的點:
1.深化樹的前中後序遍歷。
2.根據問題規模估算時間複雜度。
根據前序中序求後序
如前序 為 abdecgf 中序 為 bdacgef 先 根據前序第乙個節點 把中序分為bd和cgef兩部分,a為根節點,a左邊為左子樹,右邊為右子樹。再把左右子樹分別做上述步驟。以此類推 根據第二,第三.個節點構成二叉樹 a b e d c f g b 再根據後序的性質得到dbgcbfea 知道後...
根據後序和中序輸出前序
本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。第一行給出正整數n 30 是樹中結點的個數。隨後兩行,每行給出n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。在一行中輸出preorder 以及該樹的先序遍歷結果。數字間有1個空...
根據前序和中序推出後序
最近面試總遇到這種根據給出的兩類序遍歷,然後求按另一種形式序的遍歷。看來有必要好好總結下這個知識點,省的每次筆試時都得花不少時間推導。首先,我們看看前序 中序 後序遍歷的特性 前序遍歷 根 左 右 1.訪問根節點 2.前序遍歷左子樹 3.前序遍歷右子樹 中序遍歷 左 根 右 1.中序遍歷左子樹 2....