關於二叉樹中,對於前序、中序、後序三者中,知道知道兩個,求另外的一個有什麼方法? 比如題目:若某二叉樹的前序遍歷訪問順序是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