二叉樹的先序 中序 後序序列的轉化

2021-08-22 01:14:29 字數 779 閱讀 4438

已知二叉樹的先序序列pre和中序序列in,求後序序列post。

先序序列的結構是:根 + 左子樹的先序序列 + 右子樹的先序序列

中序序列的結構是:左子樹的中序序列 + 根 + 右子樹的中序序列

後續序列的結構是:左子樹的後序序列 + 右子樹的後序序列 + 根

如圖所示

現在只看先序和中序序列,對於每乙個二叉樹,都可以劃分成這樣的形式。這時候得到了左右子樹的先序和中序序列

用分而治之的策略,對劃分出的左右子樹的兩個中序序列遞迴進行劃分,直到劃分到只剩乙個或為空(視為value為空),把當前的value加到後序序列尾部。(把null節點視為value為空是為了方便理解,**裡直接return)

如果給出後序和中序,求先序,也是一樣的。只是變成用後序序列的最後乙個元素劃分中序序列。

中序序列是必須知道的。因為沒有中序序列,就沒法把二叉樹劃分成根和左右子樹。

#include using namespace std;

vectorans;

void postorder(int pre, int in, int length)

void preorder(int post, int in, int length)

二叉樹 先序序列 中序序列 後序序列

已知二叉樹的先序遍歷序列和中序遍歷序列,求後序遍歷序列。先遞迴構造二叉樹,然後遞迴得到後序序列。思路 先序序列的第乙個結點為要構造二叉樹的根結點,在中序序列中查詢二叉樹的根結點,則中序列根結點左邊為根結點的左子樹的中序序列,右邊為根結點的右子樹的中序序列。而先序序列根結點後面分別為它的左子樹和右子樹...

二叉樹 先序 中序 後序

同學整理的,順便傳上分享下 一,已知先序和中序 求後序 1 include2 include3 include4 using namespace std 5char s1 10 s2 10 ans 10 6 int o 0 7 void tree int n char s1 char s2 char...

求二叉樹的先序遍歷(中序 後序 先序)

problem description 已知一棵二叉樹的中序遍歷和後序遍歷,求二叉樹的先序遍歷 input 輸入資料有多組,第一行是乙個整數t t 1000 代表有t組測試資料。每組包括兩個長度小於50 的字串,第乙個字串表示二叉樹的中序遍歷序列,第二個字串表示二叉樹的後序遍歷序列。output 輸...