層序加中序轉前序和後序

2021-09-12 02:37:02 字數 1316 閱讀 4503

凡是樹,首先要考慮能不能用遞迴的方法來做;比如:

層序:1 2 3 4 5 6 7

中序:4 2 5 1 6 3 7

1必定是根節點,在中序中查詢位置,中序中的1將中序分為左右子樹,我們用v1儲存左子樹的節點,然後層序中從第二個節點開始按照層序的順序依次進入v2,v3;v2,v3分別是左子樹和右子樹的層序遍歷,這樣就變成子問題了,

第一次遞迴這裡v2為 2 4 5 ;v3為3 6 7

然後就不用多說了吧,前序和後序操作思想是一樣的,大部分**都一樣,就是push_back順序不一樣而已啦

#include #include#include#include#include#include#include#include#include#include#include//標頭檔案有點多,因為不想每次寫標頭檔案。。。

using namespace std;

int sum = 0;

vectorpreorder, inorder, postorder, levelorder;

void getpreorder(vectorv,int instart,int inend)

for (int j = 1; j < v.size(); j++)

preorder.push_back(v[0]);

getpreorder(v2, instart, instart + i - 1);

getpreorder(v3, instart + i + 1, inend);

}void getpostorder(vectorv, int instart, int inend)

for (int j = 1; j < v.size(); j++)

getpostorder(v2, instart, instart + i - 1);

getpostorder(v3, instart + i + 1, inend);

postorder.push_back(v[0]);

}int main()

for (int i = 0; i < n; i++)

getpreorder(levelorder, 0, n - 1);

getpostorder(levelorder, 0, n - 1);

for (int i = 0; i < preorder.size(); i++)

cout << endl;

for (int i = 0; i < postorder.size(); i++)

system("pause");

return 0;

}

前序中序後序

遍歷情況 前序 根結點 左子樹 右子樹 中序 左子樹 根結點 右子樹 後序 左子樹 右子樹 根結點 例題一 輸入描述 input description 輸入檔案共2行,第一行表示該樹的前序遍歷結果,第二行表示該樹的後序遍歷結果。輸入的字符集合為,長度不超過26。輸出描述 output descri...

前序遍歷 中序遍歷 後序遍歷 層序遍歷

根據遍歷畫圖 先根據中序和前序找到每一級的所有根 最近也是在準備筆試,由於沒有系統的學過資料結構,所以每次在考到二叉樹的遍歷的時候都是直接跪,次數多了也就怒了,前些天也是準備 沒時間整這些,現在提交了,算是稍微輕鬆點了,所以花了半天的時間來學了下二叉樹。現在記下來,以便後序查閱。一 二叉樹的遍歷概念...

中序 和前序 後序建樹

基本思路是遞迴,引數是 i,j 是 絕對座標,想對於 整體的座標 參考自 include include include using namespace std string pre abdhlekcfg string mid hldbekafcg string post lhdkebfgca st...