程式設計訓練 二叉樹遍歷,從前序 中序到後序

2021-10-23 22:37:03 字數 1639 閱讀 8436

二叉樹是一種非常重要的資料結構,非常多其他資料結構都是基於二叉樹的基礎演變而來的。對於二叉樹,深度遍歷有前序、中序以及後序三種遍歷方法。

三種基本的遍歷思想為:

前序遍歷:根結點 —> 左子樹 —> 右子樹

中序遍歷:左子樹—> 根結點 —> 右子樹

後序遍歷:左子樹 —> 右子樹 —> 根結點

比如,求以下二叉樹的各種遍歷

前序遍歷:1 2 4 5 7 8 3 6

中序遍歷:4 2 7 5 8 1 3 6

後序遍歷:4 7 8 5 2 6 3 1

需要你編寫程式解決的問題是:已知乙個二叉樹的前序遍歷和中序遍歷的結果,給出該二叉樹的後序遍歷的結果。

有多組測試資料,每組測試資料三行,每組測試資料第一行只有乙個正整數n,表示二叉樹節點的數目,n=0意味著輸入結束並且不需要處理。

每組測試資料第二行是二叉樹的前序遍歷的結果,是乙個長度為n的字串,每個節點由乙個字元表示,字元是大小寫英文本母及10個數字,不同的節點用不同的字元表示,也即無論前序遍歷和中序遍歷的字串中沒有重複的字元。

每組測試資料第二行是二叉樹的中序遍歷的結果,也是乙個長度為n的字串。

40%的測試資料1 ≤ n≤ 10;

30%的測試資料1 ≤ n≤ 20;

20%的測試資料1 ≤ n≤ 40;

10%的測試資料1 ≤ n≤ 62;

對於每組測試資料,輸出一行,是乙個長度為n的字串,表示二叉樹後序遍歷的結果。

8

12457836

42758136

4abcd

abcd

4abcd

dcba

0

47852631

dcba

dcba

//35.二叉樹遍歷,從前序、中序到後序

#include

using

namespace std;

void

gethou

(string qian, string zhong)

string data = qian.

substr(0

,1);

//前序遍歷的開頭一定是根結點

string::size_type finddata = zhong.

find

(data)

;//在中序遍歷中找到根結點的位置

int posi = finddata;

//位置

//後序遍歷:左子樹->右子樹->根結點

gethou

(qian.

substr(1

, posi)

, zhong.

substr(0

, posi));

//遍歷左子樹

gethou

(qian.

substr

(posi +1)

, zhong.

substr

(posi +1)

);//遍歷右子樹

cout << data;

//根結點

}int

main()

return0;

}

從前序與中序遍歷構造二叉樹

從前序與中序遍歷序列構造二叉樹 根據一棵樹的前序遍歷與中序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 前序遍歷 preorder 3 9,20 15,7 中序遍歷 inorder 9 3,15 20,7 返回如下的二叉樹 3 9 20 157 definition for a b...

從前序與中序遍歷序列構造二叉樹

題目描述 if inbegin inend 區間只有乙個結點,就是根結點 區間正常 int rootindex inbegin while rootindex inend 用前序的根劃分中序為兩個子區間 else 遞迴建立左子樹 root left buildtree preorder,pindex...

從前序與中序遍歷序列構造二叉樹

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7python definition for a binary tree...