二叉樹是一種非常重要的資料結構,非常多其他資料結構都是基於二叉樹的基礎演變而來的。對於二叉樹,深度遍歷有前序、中序以及後序三種遍歷方法。
三種基本的遍歷思想為:
前序遍歷:根結點 —> 左子樹 —> 右子樹
中序遍歷:左子樹—> 根結點 —> 右子樹
後序遍歷:左子樹 —> 右子樹 —> 根結點
比如,求以下二叉樹的各種遍歷
前序遍歷: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...