已知後序遍歷和中序遍歷求前序遍歷

2021-06-19 10:45:29 字數 896 閱讀 4715

而已知後序遍歷和中序遍歷求前序遍歷的過程差不多,但由於後序遍歷是最後才訪問根節點的 

所以要從後開始搜尋,例如上面的例子,後序遍歷為 gbdehfca,中序遍歷為 dgbaechf 

後序遍歷中的最後乙個元素是根節點,a,然後查詢中序中a的位置 

把中序遍歷分成 dgb a echf,而因為節點個數要對應 

後序遍歷分為 gbd ehfc a,gbd為左子樹,ehfc為右子樹,這樣又可以遞迴計算了 

其他一些附帶的**上面已經有,這裡就不重複貼了,具體**如下: 

#include #include using namespace std;  

int find(const string &str, char c)

bool backmid(const string &back, const string &mid)

//根節點是最後乙個元素

int k = find(mid, back[back.size() - 1]);

//變成前序遍歷要先輸出節點的值

cout << back[back.size() - 1];

string backtmp = back.substr(0, k);

string midtmp = mid.substr(0, k);

backmid(backtmp, midtmp);

backtmp = back.substr(k, back.size() - k - 1);

midtmp = mid.substr(k + 1, mid.size() - k - 1);

backmid(backtmp, midtmp);

} int main()

}

已知中序遍歷和後序遍歷,求前序遍歷

已知中序遍歷和後序遍歷,求前序遍歷 演算法的主要部分是將中序遍歷分成左中右三部分 將後序遍歷分成左右中三部分 最後後序建樹的時候節點就等於中間的部分 左子樹由中序遍歷的左部分和後序遍歷的左部分構建 右子樹由中序遍歷的右部分和後序遍歷的右部分構建 include include include inc...

樹的遍歷 已知中序 前序 後序)求層次遍歷

先來看一道題目 時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。輸入格式 輸入第一行給出乙個正整數n 30 是二叉樹中結點的個數。第二...

由前序遍歷和中序遍歷,求後序遍歷

若已知一棵二叉樹的前序序列是 b e f c g d h,中序序列是 f e b g c h d 則它的後序序列 前序遍歷 先遍歷根節點,再遍歷左孩子,最後遍歷右孩子。中序遍歷 先遍歷左孩子,再遍歷根節點,最後遍歷右孩子。所以,遍歷的序列也是這個規律。首先,看前序遍歷中b節點,它是第乙個節點,也是根...