首先說一下,只有 先序+中序——>後序,以及後序+中序——>前序,這兩種推舉方式,因為當只給出前序以及後序的遍歷方式時,推得的中序是不唯一的,也就是不存在。
方法(核心):是根據每種遍歷方式的特點,以前序遍歷和後序遍歷為基準,對中序遍歷進行割裂(這裡姑且稱它為割裂法)。
這個要求我們對三種遍歷方式 爛熟於心(必須透徹了解!!!)才能推得建樹方式。這裡給出兩篇講的很不錯的部落格 三種遍歷方式詳解、知二推三的粗略**。
由於先序遍歷的便捷性,中序遍歷前序遍歷推得後續遍歷是比較容易的,所以這裡只給出中+後——>前的**。
一定要牢記上面所說的割裂方法,了解此方法後,這些**是不必要記住的。
下面的**同時對應了pta的一道題目,這裡給出題目以及ac**;
7-1 根據後序和中序遍歷輸出先序遍歷 (25 分)
本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。
第一行給出正整數n(≤30),是樹中結點的個數。隨後兩行,每行給出n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。
在一行中輸出preorder:
以及該樹的先序遍歷結果。數字間有1個空格,行末不得有多餘空格。
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
preorder: 4 1 3 2 6 5 7
ac**(割裂法):
#include using namespace std;
const int maxn=1e5+10;
int last[maxn],mid[maxn];
typedef struct node
*bitree;
node* solve(int *last,int *mid,int len)
void preorder(bitree tree)//先序遍歷
int main()
兩種程序遍歷方式
病毒樣本md5 642a393a5c65d202180df5af06f29c5a include include 通過hkey performance data遍歷程序.從nimda病毒中發現的這種方式.int main dword cb 0x40000,type 0 regqueryvalueex...
兩種Map遍歷方式
1 使用 jdk1.4中hashmap entryset 遍歷 存放key value鍵值對 maptempmap new hashmap tempmap.put a 1 tempmap.put b 2 tempmap.put c 3 iterator it tempmap.entryset ite...
兩種Map遍歷方式
map集合遍歷 1 使用 jdk1.4中hashmap entryset 遍歷 存放key value鍵值對 maptempmap new hashmap tempmap.put a 1 tempmap.put b 2 tempmap.put c 3 iterator it tempmap.entr...