例子,後序遍歷為 gbdehfca,中序遍歷為 dgbaechf
後序遍歷中的最後乙個元素是根節點,a,然後查詢中序中a的位置
把中序遍歷分成 dgba echf,而因為節點個數要對應
後序遍歷分為 gbd ehfc a,gbd為左子樹,ehfc為右子樹,這樣又可以遞迴計算了
最後形成的二叉樹如下所示:
具體**如下:
遞迴:#include#include#include#define max 20 /*預定義字元陣列的最大長度*/ typedef struct tnode /*該結構體型別為樹結點的型別*/ *bt; void in_post_to_bt(char *in,char *post,int len,bt &t) /*由長度為len的中序序列in和後序序列post唯一確定一棵二叉樹t*/ for(char *temp=in;tempdata =*temp; break; } in_post_to_bt(in,post,k,t->lchild ); /*建立左子樹*/ in_post_to_bt(in+k+1,post+k,len-k-1,t->rchild ); /*建立右子樹*/ } void in_visit(bt t)/*中序遍歷樹t*/ } void post_visit(bt t)/*後序遍歷樹*/ } main() { char in[max+1],post[max+1]; cout<>in; cout<>post; bt t; int len_in=strlen(in),len_post=strlen(post); if(len_in<=max&&len_post<=max) in_post_to_bt(in,post,len_in,t); cout<
二叉樹 已知前序和中序,求後序
題目描述 若某二叉樹的前遍歷訪問順序是序abdgcefh,中序遍歷順序是dgbaechf,則後序遍歷的訪問順序是什麼。若某二叉樹的前遍歷訪問順序是序abdgcefh,中序遍歷順序是dgbaechf,則後序遍歷的訪問順序是什麼。分析 首先要明確乙個基礎的問題,前序遍歷的順序是 根 左 右 中序遍歷的順...
已知二叉樹的前序和中序,求後序
以前在學習資料結構的時候,經常會有一道選擇題,已知二叉樹的前序和中序遍歷,求二叉樹的後序遍歷。後來想到用程式設計的方法來實現它,限於水平有限,一直無從下手。後來,受另乙個問題啟發,才想出其解法 include include include typedef struct btree btree en...
已知二叉樹前序和中序求後序
設某二叉樹 前序遍歷為 abcdefghi 中序遍歷為 bcaedghfi 求該二叉樹的後序遍歷?因為二叉樹前序遍歷為 abcdefghi,所以這棵樹的根結點為 又因為中序遍歷為 bcaedghfi,所以這棵樹的左子樹為bc,右子樹為edghfi 現在先看左子樹中序遍歷 bc,由前序遍歷abcdef...