對二叉樹遍歷操作的深入思考

FunnyOne發表於2017-10-21

對二叉樹遍歷操作的深入思考

已知某棵二叉樹,容易求得它的某種遍歷序列,但是,反過來,若已知某種遍歷序列,是否可以唯一確定一棵二叉樹呢?

1、若已知先/中/後序序列......

例:已知先序列為0-1-2-3-4-5-6-7-8

對應情況:

對二叉樹遍歷操作的深入思考

對二叉樹遍歷操作的深入思考

可以看到,兩幅圖片雖然先序是一樣的,但兩棵樹完全是不同的兩棵樹。

2、若已知中序和後序序列......

例:

已知中序遍歷:B D C E A F H G

已知後序遍歷:D E C B H G F A

結果:

對二叉樹遍歷操作的深入思考

推斷過程:

  • (1)從後序遍歷表中以及後序的性質,可以判定A是根

對二叉樹遍歷操作的深入思考

  • (2)從中序遍歷表中以及中序的性質,加以條件(1)以知道BDCE是A的左子數,FHG是A的右子樹
    對二叉樹遍歷操作的深入思考

  • (3)先看FGH,在後序遍歷中可以看到順序是HGF可以說明F是A的右結點;看中序遍歷可以看到順序是FHG,如果F有左子結點的話,根據中序遍歷的性質,中序遍歷表中A的後面絕逼不是F,但結果是F,說明F沒有左結點;要實現在中序遍歷中,F後面的結點排布是H G的話,就要使H是G的左節點,綜上所述,這一步可以得到這麼個結果:

對二叉樹遍歷操作的深入思考

  • (4)再看BDCE,從中序遍歷可以看到順序為:BDCE,若B有左子結點,則第一個不會是B,說明B並沒有左子結點;從後序遍歷中可以看到,順序為:DECB,說明B是A的左子結點;剩下DCE,根據中序遍歷,我有兩種猜想

對二叉樹遍歷操作的深入思考

但是根據後序遍歷所示,順序為:DEC,對於第一種猜想,應該E是D的根,與猜想1的情況出入,因此猜想2為正確的,綜上所述,可以得到這麼個結果:

對二叉樹遍歷操作的深入思考

因此可以得到一條定律:後序定根,中序分左右。

3、若已知中序和先序序列......

例:

已知中序遍歷:G D H B A E C I F

已知先序遍歷:A B D G H C E F I

結果:
對二叉樹遍歷操作的深入思考

推斷過程:

類似上面的運用兩種遍歷方法的性質和遍歷表的排布,我就懶得寫了,推一推就出來了...

4、若已知先序和後序序列......
例:

二叉樹前序遍歷為ABDEGCFH,後序序列為DGEBHFCA
可以確定第一個根節點是A,A第一個子樹根節點是B,根節點為B的子樹後序遍歷為DGEB,前序遍歷為BDEG,A第二個子樹根節點為C,他的後序遍歷為HFC,前序遍歷為CFH,然後一次遞迴。簡單起見,我們只看A第二個子樹,即右子樹C。C的第一個根節點F,子樹F的後序遍歷HF,前序遍歷FH,C沒有第二個子樹,這時不管F為左子樹還是右子樹都是滿足要求的。同理F的子樹H。

對二叉樹遍歷操作的深入思考

圖中只有一個子樹的用兩條線連線,表示這是左右子樹均可。

最後結論:中序+先序,或中序+後序均能唯一確定一棵二叉樹,但先序+後序卻不一定能唯一確定一棵二叉樹。

相關文章