凡是樹,首先要考慮能不能用遞迴的方法來做;比如:
層序: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...