而已知後序遍歷和中序遍歷求前序遍歷的過程差不多,但由於後序遍歷是最後才訪問根節點的
所以要從後開始搜尋,例如上面的例子,後序遍歷為 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節點,它是第乙個節點,也是根...