您好,登錄后才能下訂單哦!
這篇文章主要介紹了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基于非遞歸算法如何實現先序、中序及后序遍歷二叉樹操作”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。