數(shù)據(jù)結(jié)構(gòu)中序遍歷例題 請教一下數(shù)據(jù)結(jié)構(gòu),二叉樹的先序遍歷,中序遍歷,后序遍歷,是怎么弄的?
請教一下數(shù)據(jù)結(jié)構(gòu),二叉樹的先序遍歷,中序遍歷,后序遍歷,是怎么弄的?前序遍歷:其思想是先遍歷當前節(jié)點,然后遍歷左子樹。然后遍歷右子樹。所以您需要記錄右子樹的根節(jié)點,并等待它被取出以遍歷右子樹。如果堆棧
請教一下數(shù)據(jù)結(jié)構(gòu),二叉樹的先序遍歷,中序遍歷,后序遍歷,是怎么弄的?
前序遍歷:其思想是先遍歷當前節(jié)點,然后遍歷左子樹。然后遍歷右子樹。所以您需要記錄右子樹的根節(jié)點,并等待它被取出以遍歷右子樹。
如果堆棧不為空或節(jié)點指針不為空,則進入循環(huán)
如果當前節(jié)點不為空,則先將右側(cè)子節(jié)點放入堆棧(無論右側(cè)節(jié)點是否為空),然后輸出當前節(jié)點。賦值節(jié)點指針是左子節(jié)點。
如果當前節(jié)點為空。取出堆棧中的節(jié)點。
我懶得在后面寫。有時間就寫。
不建議業(yè)主問這種問題,但愿意回答的人不多。我想你可以問:哪里可以得到帶注釋的XXX源代碼
首先,前序、中序和后序的遍歷順序應(yīng)該明確:前序:父節(jié)點、左子節(jié)點、右子節(jié)點;中序:左子節(jié)點、父節(jié)點、右子節(jié)點;后序:左子節(jié)點、右子節(jié)點、父節(jié)點;后序:左子節(jié)點,右子節(jié)點;后序:左子節(jié)點,右子節(jié)點;首先根據(jù)前序遍歷,確定整個二叉樹的根節(jié)點(前序的第一個節(jié)點);然后通過中序遍歷,將整個二叉樹按根節(jié)點直接劃分為兩個子樹。
此時,按照預(yù)序和中間序一步一步地繪制整個二叉樹并不困難。然后我們可以編寫后序遍歷序列。例如:已知二叉樹的前序遍歷序列為bc D E F H,中序遍歷序列為bd C E a H F,寫后序遍歷序列。根據(jù)預(yù)排序,樹的根節(jié)點是a;根據(jù)中間順序和根節(jié)點,B、D、C、E在根節(jié)點的左子樹上,H、F在根節(jié)點的右子樹上;通過對每個子樹的逐步分析,樹是a/b f/C H/De后一個順序是:decbhfa
找到根節(jié)點(通過后一個順序),然后把中間順序的序列分成兩段,左子樹和右子樹,然后遞歸地,在分割時,您可以使用中間順序的左、右子樹的節(jié)點數(shù)來確定序列中每個段的節(jié)點數(shù)。
例如:在中間bdace Dbeca
1之后。最后一個節(jié)點必須是根節(jié)點,在本例中是a
2。中間順序?qū)?yīng)的根是a,所以a是根,BD是左子樹,CE是右子樹
3。左子樹中有兩個節(jié)點,右子樹中有兩個節(jié)點,因為后一順序遍歷是先左后右,所以后一順序被分成兩段,左dB,右EC
4。因此,左子樹的根被確定為B,右子樹的根被確定為C
5,按順序,左子樹部分為BD(B是根),右子樹部分為D,左子樹部分為C,右子樹部分為e
,所以前序為ABCDE