二叉樹-筆1

關於二叉樹中,對於前序、中序、後序三者中,知道知道兩個,求另外的一個有什麼方法?  比如題目:若某二叉樹的前序遍歷訪問順序是abdgcefh,中序遍歷訪問順序是dgbaechf,則其後序遍歷的結點訪問順序是()?

解答過程:
1)定義解釋:樹的遍歷的三種情況,是根據左子樹、右子樹、根這3者的不同訪問次序來定義的。根左右(根先訪問),則爲先序遍歷;左根右,則爲中序遍歷;左右根,則爲後序遍歷。
2)已知先序和中序遍歷結果,求樹的結構和後序遍歷結果:
先序遍歷結果給我們帶來的信息是,根在哪。
中序遍歷結果給我們帶來的信息是,左、右子樹在哪。
所以樹結構的還原過程是,根據先序找到一個根;然後根據這個根和中序遍歷結果找到它的相應的左、右子樹;依次往下。

對於例題而言:
先序遍歷的第一個節點是a,則說明a是整棵樹的根。然後在中序遍歷結果中,由a斷開,找到a的左子樹和右子樹,即dgb是a的左子樹中的節點集合,echf是a的右子樹集合。(dgb)a(echf)

然後開始遞歸求解:還原(dgb)和(echf)
(dgb)的先序遍歷結果是:bdg(從題目中的先序遍歷中,截取)
(dgb)的中序遍歷結果是:dgb(從題目中的中序遍歷中,截取)
所以b爲根,(dg)爲左子樹,右子樹爲空。即(dgb)= (dg)b

同理:(echf)=(e)c(hf)

第3次遞歸:(dg)= d(g);(hf)= (h)f

最後得到的結果就是:
((d(g))b)a ((e)c((h)f))
(在這種表示中,括號的層數代表在樹中的層數)
             a
        b        c
    d          e    f
      g            h

根據這個樹,後序遍歷爲先左、右,最後根
先訪問(dgb) (echf) 然後是a
(dgb)這棵樹的後序遍歷爲gdb
(echf)這棵樹的後序遍歷爲ehfc
所以最後結果爲gdb ehfc a

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