先序: 根節點、左子樹、右子樹
中序:左子樹、根節點、右子樹
後序:左子樹、右子樹、根節點
要理解清楚是子樹,不是孩子。。。
如上圖根節點爲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爲根,左右子樹均爲空。 根據上面幾個步驟就能夠將肯定的樹畫出來 |