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

給出前序遍歷和中序遍歷,如何繪製出二叉樹:
如果給出遍歷產生的一串字符,不容易確定各個字符在樹中的具體位置,因而需要兩個遍歷串相結合才能畫出一棵二叉樹。
如,給出前序遍歷ADFGHKLPQRWZ,中序遍歷GFHKDLAWRQPZ。
其具體尋找過程如下:
其中矩形內表示當前節點的左右子樹的元素,圓圈內爲當前節點,矩形內表示的是當前節點在該子樹中下一個訪問的節點。
首先在前序序列中找到第一個訪問的節點A,即根節點,再在中序序列中找到A,由於其爲中序序列,因而左邊的爲其左子樹中元素,右邊的爲右子樹元素。
然後再在前序序列中尋找A的下一個訪問元素,爲D,以此類推按照前序訪問的順序每次尋找下一個訪問元素,然後以該元素爲根把相應中序序列分爲左樹元素和右樹元素,直到達到最後一個元素。且由圖中標出的順序可知,前序+中序恢復樹的過程是從左到右的,注意。
這裏寫圖片描述
考慮後序+中序序列恢復樹的過程,
後序序列爲FGHDALPQRZWK
中序序列爲GFHKDLAWRQPZ
如圖爲尋找過程,注意,圖中所標示出的序號爲尋找節點的順序,而不是訪問順序。由於給出的是後序序列和中序序列,而在後序序列中,首先可以確定的是最後一個訪問的節點必然是樹的根節點,因而可以確定K位置,根據前面介紹的原則,在中序序列中分出左右子樹。然後回到後序序列中確定在訪問K之前訪問的節點爲其右節點W,然後重複上述步驟。其總體而言就是先確定根節點,然後分左右子樹,再去尋找前一個訪問的節點,由標註的的尋找次序可知,其與前序序列+中序序列相反,尋找順序是從右向左。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章