前中后序遍歷有技巧嗎 請(qǐng)教一下數(shù)據(jù)結(jié)構(gòu),二叉樹的先序遍歷,中序遍歷,后序遍歷,是怎么弄的?
請(qǐng)教一下數(shù)據(jù)結(jié)構(gòu),二叉樹的先序遍歷,中序遍歷,后序遍歷,是怎么弄的?前序遍歷:其思想是先遍歷當(dāng)前節(jié)點(diǎn),然后遍歷左子樹。然后遍歷右子樹。所以您需要記錄右子樹的根節(jié)點(diǎn),并等待它被取出以遍歷右子樹。如果堆棧
請(qǐng)教一下數(shù)據(jù)結(jié)構(gòu),二叉樹的先序遍歷,中序遍歷,后序遍歷,是怎么弄的?
前序遍歷:其思想是先遍歷當(dāng)前節(jié)點(diǎn),然后遍歷左子樹。然后遍歷右子樹。所以您需要記錄右子樹的根節(jié)點(diǎn),并等待它被取出以遍歷右子樹。
如果堆棧不為空或節(jié)點(diǎn)指針不為空,則進(jìn)入循環(huán)
如果當(dāng)前節(jié)點(diǎn)不為空,則先將右側(cè)子節(jié)點(diǎn)放入堆棧(無(wú)論右側(cè)節(jié)點(diǎn)是否為空),然后輸出當(dāng)前節(jié)點(diǎn)。賦值節(jié)點(diǎn)指針是左子節(jié)點(diǎn)。
如果當(dāng)前節(jié)點(diǎn)為空。取出堆棧中的節(jié)點(diǎn)。
我懶得在后面寫。有時(shí)間就寫。
不建議業(yè)主問(wèn)這種問(wèn)題,但愿意回答的人不多。我想你可以問(wèn):哪里可以得到帶注釋的XXX源代碼
首先了解概念:前序遍歷:訪問(wèn)根節(jié)點(diǎn)的操作發(fā)生在遍歷其左右子樹之前。中間順序遍歷:訪問(wèn)根節(jié)點(diǎn)的操作發(fā)生在遍歷其左右子樹時(shí)。后序遍歷:訪問(wèn)根節(jié)點(diǎn)的操作發(fā)生在遍歷其左右子樹之后。例:遍歷dbcefgha后,為了遍歷edcbahfg,先查找前序遍歷(聯(lián)機(jī)示例)解決方案:遍歷dbcefgha后,先看a是總根節(jié)點(diǎn),然后按順序遍歷edcbahfg找到a的位置,然后edcb在a的左分支,HFG在a的右分支。重復(fù)前兩步,查找從遍歷后的最后一個(gè)位置對(duì)應(yīng)點(diǎn),找到左、右分支按順序遍歷,最后得到aecdbhgf,然后自己驗(yàn)證…
知樹的前序遍歷,后序遍歷,怎么求中序遍歷?
首先要明確前序、中序、后序的遍歷順序:前序:父節(jié)點(diǎn),左子節(jié)點(diǎn),右子節(jié)點(diǎn);中序:左子節(jié)點(diǎn)、父節(jié)點(diǎn)、右子節(jié)點(diǎn);后序:左子節(jié)點(diǎn)、右子節(jié)點(diǎn)、父節(jié)點(diǎn);首先根據(jù)前序遍歷,確定整個(gè)二叉樹的根節(jié)點(diǎn)(前序的第一個(gè)節(jié)點(diǎn));然后通過(guò)中序遍歷,直接劃分整個(gè)二叉樹根據(jù)根節(jié)點(diǎn)分成兩個(gè)子樹。
此時(shí),按照預(yù)序和中間序一步一步地繪制整個(gè)二叉樹并不困難。然后我們可以編寫后序遍歷序列。例如:已知二叉樹的前序遍歷序列為bc D E F H,中序遍歷序列為bd C E a H F,寫后序遍歷序列。根據(jù)預(yù)排序,樹的根節(jié)點(diǎn)是a;根據(jù)中間順序和根節(jié)點(diǎn),B、D、C、e在根節(jié)點(diǎn)的左子樹上,h、f在根節(jié)點(diǎn)的右子樹上;然后逐級(jí)分析每個(gè)子樹,樹是a/╲B f/╲C,h/╲D e,后序?yàn)閐ecbhfa
前序遍歷:先訪問(wèn)根節(jié)點(diǎn),然后遍歷左子樹,最后遍歷右子樹。在遍歷左、右子樹時(shí),我們還是先訪問(wèn)根節(jié)點(diǎn),然后遍歷左子樹,最后遍歷右子樹。
后序遍歷:首先遍歷左子樹,然后遍歷右子樹,最后訪問(wèn)根節(jié)點(diǎn)。遍歷左、右子樹時(shí),仍先遍歷左子樹,再遍歷右子樹,最后遍歷根節(jié)點(diǎn)。
數(shù)據(jù)結(jié)構(gòu)中已知前序序列和中序序列,怎么得出后序序列?
根據(jù)您的圖形,無(wú)論是前序遍歷、中序遍歷還是后序遍歷,都是基于根的,也就是說(shuō),您只需查看根即可。對(duì)于中間順序的遍歷,按照規(guī)則,順序是左根右,根是F,對(duì)于根的左邊,它是F左邊的一堆,右邊是F右邊的一堆,對(duì)于左邊,根是C,C的左右兩邊的確定方法和上面的一樣。對(duì)于右邊,根是e,有e,但e的左邊是空的,寫為(()C())f(e())。這樣,acbdfeg就被依次編寫。當(dāng)然,寫作時(shí)不需要寫括號(hào),只是為了便于解釋。前序遍歷與后序遍歷相同。
先序遍歷與后序遍歷?
后序遍歷是指先遍歷左子樹,再遍歷右子樹,最后遍歷根節(jié)點(diǎn)、左子樹和右子樹中的根節(jié)點(diǎn)。在遍歷左、右子樹時(shí),仍先遍歷左子樹,再遍歷右子樹,最后遍歷根節(jié)點(diǎn)。
例如:
后序的順序:左->右->根
后序:J、F、K、G、D、B、h、l、m、I、e、C、a