轉:二叉樹的前序遍歷、中序遍歷和後序遍歷之間還原二叉樹

1、概念

(1)前序遍歷

      a、訪問根節點;b、前序遍歷左子樹;c、前序遍歷右子樹。

(2)中序遍歷

      a、中序遍歷左子樹;b、訪問根節點;c、中序遍歷右子樹。

(3)後序遍歷

      a、後序遍歷左子樹;b、後續遍歷右子樹;c、訪問根節點。

2、前序遍歷和中序遍歷還原二叉樹

思想如下:

    a、根據前序遍歷結果,第一個元素爲二叉樹的根結點;

    b、觀察中序遍歷結果,根結點左側的爲左子樹,若左子樹根結點前(後)再無任何元素,則左(右)子樹的左分支爲空;根結點右側的爲右子樹,若右子樹根結點前(後)再無任何元素,則左(右)子樹的左分支爲空;

    c、上面的過程是遞歸的。先找到當前樹的根結點,然後劃分爲左右子樹,再進入左子樹重複上面的過程,最後進入右子樹重複上面的過程,最終還原一棵樹。

例:

    已知前序遍歷:ABDHIEJKCFLMGNO

           中序遍歷:HDIBJEKALFMCNGO


按照上述步驟先畫出二叉樹,然後在進行求解後序遍歷結果。結果爲:HIDJKEBLMFNOGCA

練習:

1、前序遍歷:GDAFEMHZ

      中序遍歷:ADEFGHMZ

    求得後序遍歷結果爲:AEFDHZMG

2、前序遍歷:ADCEFGHB

      中序遍歷:CDFEGHAB

    求得後序遍歷結果爲:CFHGEDBA

3、中序遍歷和後序遍歷還原二叉樹

思想如下:

    a、根據後序遍歷結果,最後一個元素爲二叉樹的根結點;

    b、觀察中序遍歷結果,其中根結點左側爲左子樹,若左子樹根結點前(後)再無任何元素,則左(右)子樹的左分支爲空;其中根結點右側爲右子樹,若右子樹根結點前(後)再無任何元素,則左(右)子樹的左分支爲空;

    c、上面的過程是遞歸的。先根據後序遍歷結果找根結點,根結點左側爲左子樹,右側爲右子樹,再進入左子樹重複上面的過程,最後進入右子樹重複上面的過程,最終還原一棵樹。

例:

    已知

中序遍歷:HDIBJEKALFMCNGO

後序遍歷:HIDJKEBLMFNOGCA

         

按照上述步驟先畫出二叉樹,然後在進行求解前序遍歷結果。結果爲:

ABDHIEJKCFLMGNO

練習:可參考前序遍歷和中序遍歷的練習

4、前序遍歷和後序遍歷還原二叉樹

已知前序和中序,後序和中序遍歷序列之後,可以唯一確定一棵二叉樹。但是,只知道前序和後序遍歷序列,是無法知道哪個結點是左子樹還算右子樹。



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