
本文實(shí)例講述了PHP基于非遞歸算法實(shí)現(xiàn)先序、中序及后序遍歷二叉樹操作。分享給大家供大家參考,具體如下:
概述:
二叉樹遍歷原理如下:

針對(duì)上圖所示二叉樹遍歷:
1. 前序遍歷:先遍歷根結(jié)點(diǎn),然后遍歷左子樹,最后遍歷右子樹。
ABDHECFG
2.中序遍歷:先遍歷左子樹,然后遍歷根結(jié)點(diǎn),最后遍歷右子樹。
HDBEAFCG
3.后序遍歷:先遍歷左子樹,然后遍歷右子樹,最后遍歷根節(jié)點(diǎn)。
HDEBFGCA
實(shí)現(xiàn)方法:
先序遍歷:利用棧先進(jìn)后出的特性,先訪問根節(jié)點(diǎn),再把右子樹壓入,再壓入左子樹。這樣取出的時(shí)候是先取出左子樹,最后取出右子樹。
function preorder($root){ $stack = array(); array_push($stack, $root); while(!empty($stack)){ $center_node = array_pop($stack); echo $center_node- value; // 根節(jié)點(diǎn) if($center_node- right != null) array_push($stack, $center_node- right); // 壓入右子樹 if($center_node- left != null) array_push($stack, $center_node- left); // 壓入左子樹}中序:需要從下向上遍歷,所以先把左子樹壓入棧,然后逐個(gè)訪問根節(jié)點(diǎn)和右子樹。
function inorder($root){ $stack = array(); $center_node = $root; while(!empty($stack) || $center_node != null){ while($center_node != null){ array_push($stack, $center_node); $center_node = $center_node- left; $center_node = array_pop($stack); echo $center_node- value; $center_node = $center_node- right;}后序:先把根節(jié)點(diǎn)存起來,然后依次儲(chǔ)存左子樹和右子樹。然后輸出。
function tailorder($root){ $stack = array(); $outstack = array(); array_push($$stack, $root); while($empty($stack)){ $center_node = array_pop($stack); array_push($outstack, $center_node); if($center_node- right != null) array_push($stack, $center_node- right); if($center_node- left != null) array_push($stack, $center_node- left); while($empty($outstack)){ $center_node = array_pop($outstack); echo $center_node- value;}您可能感興趣的文章:PHP使用兩個(gè)棧實(shí)現(xiàn)隊(duì)列功能的方法的講解
詳解PHP序列化和反序列化原理的講解
基于 Swoole 的微信掃碼登錄功能實(shí)現(xiàn)代碼的過程講解
以上就是PHP基于非遞歸算法實(shí)現(xiàn)先序、中序及后序遍歷二叉樹操作的示例的詳細(xì)內(nèi)容,PHP教程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選