遞歸結(jié)構(gòu)流程圖 二叉樹先序遍歷的非遞歸算法具體實(shí)現(xiàn)?
二叉樹先序遍歷的非遞歸算法具體實(shí)現(xiàn)?//Non-recursive method pbinaryutreeuuu node copyuuubinary ree(pbinaryutreeuuuuunod
二叉樹先序遍歷的非遞歸算法具體實(shí)現(xiàn)?
//Non-recursive method pbinaryutreeuuu node copyuuubinary ree(pbinaryutreeuuuuunode BT){//preorder transversal輸出樹1,2,3堆棧的所有節(jié)點(diǎn)值
使用postorder和middle order transversal還原二叉樹,使用postorder和middle order transversal還原二叉樹,以便于其他樹木的作業(yè)。在這里,我們先恢復(fù)二叉樹,然后進(jìn)行預(yù)序遍歷,得到預(yù)序遍歷的結(jié)果。我們同意恢復(fù)樹的函數(shù)稱為restoretree()?;謴?fù)左右子樹時(shí),需要計(jì)算它們的位置,即H1、H2和Z1、Z2的值需要重新計(jì)算,并在更新后傳遞給restoretree()函數(shù)。以左子樹的構(gòu)造為例,左子樹的第一個(gè)元素下標(biāo)為Z1,最后一個(gè)元素下標(biāo)為I-1,H1的對(duì)應(yīng)值為H1,H2的值為H1(I-Z1-1),即H1的當(dāng)前位置向前移動(dòng)I-Z1-1長(zhǎng)度。R代碼實(shí)現(xiàn)以實(shí)現(xiàn)前面提到的字母序列為例,因?yàn)楫?dāng)代碼恢復(fù)樹時(shí),它首先恢復(fù)根節(jié)點(diǎn),然后訪問樹的左、右子樹,所以恢復(fù)過程也相當(dāng)于根優(yōu)先遍歷過程。如果只想先遍歷找到根,就不能構(gòu)建樹。我們可以刪除根優(yōu)先遍歷函數(shù)并簡(jiǎn)化其他一些語句,這兩段代碼的結(jié)果是相同的。以下是示例輸入和輸出。這里的代碼擴(kuò)展添加了一段代碼,它使用前序遍歷和中序遍歷來恢復(fù)二叉樹并進(jìn)行后序遍歷。R代碼可以像以前一樣簡(jiǎn)化。簡(jiǎn)化后,無需建樹即可遍歷。右