已知二叉樹的先序遍歷序列和中序遍歷序列,求後序遍歷序列。
先遞迴構造二叉樹,然後遞迴得到後序序列。
思路:先序序列的第乙個結點為要構造二叉樹的根結點,在中序序列中查詢二叉樹的根結點,則中序列根結點左邊為根結點的左子樹的中序序列,右邊為根結點的右子樹的中序序列。而先序序列根結點後面分別為它的左子樹和右子樹的先序序列。有了根結點在中序序列的位置,就知道了左子樹和右子樹的先序序列各自的位置。這樣,就知道了根結點兩個子樹的序列。
然後在構造了根結點後,就可以遞迴呼叫函式來勾結根結點的左子樹和右子樹。
以上為二叉樹的恢復。
後序遍歷二叉樹也是用遞迴即可。
**如下:
string.find() 返回查詢元素的下標
string.substr(a, b) 從第a個下標的元素開始擷取b個元素
**如下:
#include#include#includeusing namespace std;
struct node
;node* creattree(string pre, string in)
return root;
}void postorder(node * root) //遞迴後序遍歷
}int main()
{ string pre_str, in_str;
node *root;
while(cin>>pre_str>>in_str)
{ root = creattree(pre_str, in_str);
postorder(root);
cout<
已知先序序列 中序序列建立二叉樹
名稱 已知先序序列 中序序列建立二叉樹 說明 這裡主要用的是遞迴的演算法。每次函式引數傳遞的 主要是樹的根節點和樹在先序和中序序列中的元素。最後 遞迴的結束條件是,要建立的子樹長度為零,即子樹 為空。int nodenum 結點的個數 查詢根結點在mid中的位置 int findroot int m...
先序 中序 後序序列的二叉樹構造演算法
如果同時知道二叉樹的先序序列和中序序列,或者同時知道二叉樹的後序序列和中序序列,就能確定這顆二叉樹的形狀。2 應用 通過二叉樹的先序序列 中序序列或後序序列 中序序列,可構造出唯一的二叉樹結構。3 實現 1 二叉樹的型別定義 typedef char elemtype typedef struct ...
二叉樹的先序 中序 後序序列的轉化
已知二叉樹的先序序列pre和中序序列in,求後序序列post。先序序列的結構是 根 左子樹的先序序列 右子樹的先序序列 中序序列的結構是 左子樹的中序序列 根 右子樹的中序序列 後續序列的結構是 左子樹的後序序列 右子樹的後序序列 根 如圖所示 現在只看先序和中序序列,對於每乙個二叉樹,都可以劃分成...