資料結構 根據兩種遍歷方式推得另外一種遍歷方式

2021-09-30 16:59:01 字數 1017 閱讀 4586

首先說一下,只有 先序+中序——>後序,以及後序+中序——>前序,這兩種推舉方式,因為當只給出前序以及後序的遍歷方式時,推得的中序是不唯一的,也就是不存在。

方法(核心):是根據每種遍歷方式的特點,以前序遍歷和後序遍歷為基準,對中序遍歷進行割裂(這裡姑且稱它為割裂法)。

這個要求我們對三種遍歷方式 爛熟於心(必須透徹了解!!!)才能推得建樹方式。這裡給出兩篇講的很不錯的部落格 三種遍歷方式詳解、知二推三的粗略**。

由於先序遍歷的便捷性,中序遍歷前序遍歷推得後續遍歷是比較容易的,所以這裡只給出中+後——>前的**。

一定要牢記上面所說的割裂方法,了解此方法後,這些**是不必要記住的。

下面的**同時對應了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...