二叉樹 先序序列 中序序列 後序序列

2021-05-25 07:28:16 字數 796 閱讀 4424

已知二叉樹的先序遍歷序列和中序遍歷序列,求後序遍歷序列。

先遞迴構造二叉樹,然後遞迴得到後序序列。

思路:先序序列的第乙個結點為要構造二叉樹的根結點,在中序序列中查詢二叉樹的根結點,則中序列根結點左邊為根結點的左子樹的中序序列,右邊為根結點的右子樹的中序序列。而先序序列根結點後面分別為它的左子樹和右子樹的先序序列。有了根結點在中序序列的位置,就知道了左子樹和右子樹的先序序列各自的位置。這樣,就知道了根結點兩個子樹的序列。

然後在構造了根結點後,就可以遞迴呼叫函式來勾結根結點的左子樹和右子樹。

以上為二叉樹的恢復。

後序遍歷二叉樹也是用遞迴即可。

**如下:

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。先序序列的結構是 根 左子樹的先序序列 右子樹的先序序列 中序序列的結構是 左子樹的中序序列 根 右子樹的中序序列 後續序列的結構是 左子樹的後序序列 右子樹的後序序列 根 如圖所示 現在只看先序和中序序列,對於每乙個二叉樹,都可以劃分成...