A1138 根據前序 中序生成後序

2022-05-02 05:18:07 字數 1037 閱讀 6917

參考了部落格上碼量不到50行的**,完成了這題的ac重構。感覺真的基礎很重要,這題其實是很簡單的一道樹的前中後序的題目。但是我之前練習的時候,都是用的自己總結的騷套路,雖然理解起來很直觀,但是用了動態陣列(vector),時間複雜度比較大。這題問題規模n=5e4,時間控制600ms,雖然已經ac了,但是執行時間也花了400ms。

當時考試的時候又是用vector又是建樹,所以最後乙個case沒過,丟了5分,很可惜。

#include #include 

#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

}

view code

需要注意的點:

根據問題的規模和題目的條件,估計應該用什麼方法,越簡單越好,題目不涉及的邊界條件就不要去管了。

需要拓展的點:

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....