從前序 中序或者後序 中序序列中恢復二叉樹過程

2021-07-11 10:51:17 字數 887 閱讀 4908

給出前序遍歷和中序遍歷,如何繪製出二叉樹:

如果給出遍歷產生的一串字元,不容易確定各個字元在樹中的具體位置,因而需要兩個遍歷串相結合才能畫出一棵二叉樹。

如,給出前序遍歷adfghklpqrwz,中序遍歷gfhkdlawrqpz。

其具體尋找過程如下:

其中矩形內表示當前節點的左右子樹的元素,圓圈內為當前節點,矩形內表示的是當前節點在該子樹中下乙個訪問的節點。

首先在前序序列中找到第乙個訪問的節點a,即根節點,再在中序序列中找到a,由於其為中序序列,因而左邊的為其左子樹中元素,右邊的為右子樹元素。

然後再在前序序列中尋找a的下乙個訪問元素,為d,以此類推按照前序訪問的順序每次尋找下乙個訪問元素,然後以該元素為根把相應中序序列分為左樹元素和右樹元素,直到達到最後乙個元素。且由圖中標出的順序可知,前序+中序恢復樹的過程是從左到右的,注意。

考慮後序+中序序列恢復樹的過程,

後序序列為fghdalpqrzwk

中序序列為gfhkdlawrqpz

如圖為尋找過程,注意,圖中所標示出的序號為尋找節點的順序,而不是訪問順序。由於給出的是後序序列和中序序列,而在後序序列中,首先可以確定的是最後乙個訪問的節點必然是樹的根節點,因而可以確定k位置,根據前面介紹的原則,在中序序列中分出左右子樹。然後回到後序序列中確定在訪問k之前訪問的節點為其右節點w,然後重複上述步驟。其總體而言就是先確定根節點,然後分左右子樹,再去尋找前乙個訪問的節點,由標註的的尋找次序可知,其與前序序列+中序序列相反,尋找順序是從右向左。

前序中序後序

遍歷情況 前序 根結點 左子樹 右子樹 中序 左子樹 根結點 右子樹 後序 左子樹 右子樹 根結點 例題一 輸入描述 input description 輸入檔案共2行,第一行表示該樹的前序遍歷結果,第二行表示該樹的後序遍歷結果。輸入的字符集合為,長度不超過26。輸出描述 output descri...

前序中序求後序 後序中序求前序層次 模板

這是資料結構的知識。剛開始先拒絕用指標去寫。當我把這個想法和別人分享是,別人說不喜歡用指標的程式設計師不是乙個好的c c 程式設計師。所以,就有了這麼勵志的時刻,我參考大牛的 自己用指標寫了個遍,直接1a 不用指標總是出現各種想不到的錯誤。心累。orz.include include include...

前序中序求後序

test fdxeag xdefag 涉及到二叉樹的問題最好不用動態申請,對記憶體的管理很麻煩 採用預分配的靜態陣列 本題目由前序和中序得到後序,方法 先構造二叉樹,再進行 include includestruct nodetree 50 char str1 50 str2 50 分別存放前序和中...