本文實例講述了PHP基于非遞歸算法實現先序、中序及后序遍歷二叉樹操作。分享給大家供大家參考,具體如下:
概述:
二叉樹遍歷原理如下:
針對上圖所示二叉樹遍歷:
1. 前序遍歷:先遍歷根結點,然后遍歷左子樹,最后遍歷右子樹。
ABDHECFG
2.中序遍歷:先遍歷左子樹,然后遍歷根結點,最后遍歷右子樹。
HDBEAFCG
3.后序遍歷:先遍歷左子樹,然后遍歷右子樹,最后遍歷根節點。
HDEBFGCA
實現方法:
先序遍歷:利用棧先進后出的特性,先訪問根節點,再把右子樹壓入,再壓入左子樹。這樣取出的時候是先取出左子樹,最后取出右子樹。
function preorder($root){ $stack = array(); array_push($stack, $root); while(!empty($stack)){ $center_node = array_pop($stack); echo $center_node- value; // 根節點 if($center_node- right != null) array_push($stack, $center_node- right); // 壓入右子樹 if($center_node- left != null) array_push($stack, $center_node- left); // 壓入左子樹}
中序:需要從下向上遍歷,所以先把左子樹壓入棧,然后逐個訪問根節點和右子樹。
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;}
后序:先把根節點存起來,然后依次儲存左子樹和右子樹。然后輸出。
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使用兩個棧實現隊列功能的方法的講解
詳解PHP序列化和反序列化原理的講解
基于 Swoole 的微信掃碼登錄功能實現代碼的過程講解
以上就是PHP基于非遞歸算法實現先序、中序及后序遍歷二叉樹操作的示例的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答