先序: 根節點、左子樹、右子樹
中序:左子樹、根節點、右子樹
后序:左子樹、右子樹、根節點
要理解清楚是子樹,不是孩子。。。
如上圖根節點為A,那么{B、D、E、H}為左子樹,而{C、F、G、I、J}組成其右子樹。再深入A的左子樹,它也是一棵二叉樹,根節點為B,左子樹為{D},右子樹為{E、H}。依此類推。。
先序:A、B、D、E、H、C、F、G、I、J
中序:D、B、H、E、A、F、C、I、G、J
后序:D、H、E、B、F、I、J、G、C、A
今天數據結構的考試有這個題,做了好久,下來后,我好好地在網上查了一下,並結合我自己的理解,總結出來了一個比較好理解的方法。這個方法可以說做起這樣的題又快又准。
(概括為一個口訣:先序放中間,中序分兩邊)
基本思想就是遞歸:
1.取出先序的第一個節點。(先序中的節點為根節點)
2.用第一個節點可以將中序分成左右子樹,然后又取出先序的第二個節點
再次將左右子樹再次划分,
3,當將中序全部划分為單個點時就結束。
例如:假設一顆二叉樹的先序序列是:EBADCFHGIKJ。 中序序列為:ABCDEFGHIJK。請畫出該二叉樹。

生成的二叉樹如下圖所示:

問題擴展: 1,只有先序和中序 或 中序和后序可以確定一顆樹。先序和后序確定不了一顆樹。 2,如何根據中序和后序確定一顆樹呢? 方法跟上面的由先序和中序確定一顆樹的思想大同小異。 例如:中序:BEDAC 后序: EDBCA <---------找根的方向 先是A是根,故有根A,左子樹為BED 右子樹為C 然后是C為根,C的左右子樹均為空。 然后是B為根,B的左子樹為空,右子樹為ED 然后是D為根,D的左子樹為E,右子樹為空。 然后是E為根,左右子樹均為空。 根據上面幾個步驟就可以將確定的樹畫出來 |