給出先序和中序序列,還原二叉樹的規律方法
阿新 • • 發佈:2019-02-08
已知先序序列:A B C D E F G H I
中序序列;B C A E D G H F I
還原二叉樹的結構。
首先,我們要根據先序序列和中序序列的特點:先序序列是先訪問節點的值,然後是左孩子,其次是右孩子;而中序序列是先訪問左孩子,再訪問節點的值,再訪問右孩子。
根據這個規律,首先看先序序列的A,得到這個A便是根節點,我們再中序序列中找到A,在A的左側的序列便是左子樹,A的右邊部分是右子樹,這取決於它的訪問順序。即左子樹由BC構成,右子樹由DEFGHI構成。
而樹的遍歷是一層一層遞迴的,那麼還原也一樣。我們根據左子樹(右子樹)的根重複上面的操作便可以得到最終的二叉樹。首先看左子樹,先序序列接著訪問B,在中序序列裡找到B,由於中序序列是先訪問左孩子,再訪問節點的值,再訪問右孩子,則B的左右則代表著它的左右子樹。我們看到中序序列裡B的左邊
沒有值,右邊有個C,所以我們可以得出下面的結構:
A
/ \
B
\
C
這樣我們的左子樹就完了,我們再看右子樹:
根據先序序列,右子樹是DEFGHI,首先訪問D,我們在中序序列裡找到D,它的左邊有E(不包含已經訪問過的),右邊有GHFI,即D節點的左子樹為E,右子樹為GHFI。則可得到下面的結構:
A
/ \
B D
\ / \
C E
由於D的左子樹只有一個節點E,所以E沒有左右子樹。
繼續訪問先序序列裡的F,找到中序序列裡的F,左子樹為GH,右子樹為I,則可以得到下面的結構:
A
/ \
B D
\ / \
C E F
/ \
I
然後根據先序序列再找G,在中序序列中我們可以看到G有右子樹H,這樣我們就完成了所有的遍歷,得到了最終的二叉樹結構:
A
/ \
B D
\ / \
C E F
/ \
G I
\
H
跟著上面的步驟,自己走一遍應該就能掌握方法了,僅供學習交流。