PHP基於非遞迴演算法實現先序、中序及後序遍歷二叉樹操作示例
本文例項講述了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;
}
}
相關文章
- 非遞迴實現先序遍歷和中序遍歷遞迴
- 遞迴和迭代實現二叉樹先序、中序、後序和層序遍歷遞迴二叉樹
- 非遞迴先序遍歷二叉樹遞迴二叉樹
- 非遞迴遍歷二叉樹的四種策略-先序、中序、後序和層序遞迴二叉樹
- 演算法 -- 實現二叉樹先序,中序和後序遍歷演算法二叉樹
- [java] 二叉樹的後序遍歷(遞迴與非遞迴實現)Java二叉樹遞迴
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- 二叉樹的前中後序遍歷(遞迴和非遞迴版本)二叉樹遞迴
- 二叉樹迭代器(中序遞迴、前序和後序遍歷)演算法二叉樹遞迴演算法
- 【演算法】二叉樹、N叉樹先序、中序、後序、BFS、DFS遍歷的遞迴和迭代實現記錄(Java版)演算法二叉樹遞迴Java
- 二叉樹的四種遍歷方法:先序,中序,後序,層序二叉樹
- 二叉樹的先,中,後序遍歷二叉樹
- 二叉樹的先中後序遍歷二叉樹
- 刷題系列 - Python用非遞迴實現二叉樹中序遍歷Python遞迴二叉樹
- 二叉樹建立,前序遍歷,中序遍歷,後序遍歷 思路二叉樹
- 二叉樹的建立、前序遍歷、中序遍歷、後序遍歷二叉樹
- 二叉樹中序和後序遍歷表示式二叉樹
- 二叉樹的前序、中序、後序的遞迴和迭代實現二叉樹遞迴
- 二叉樹--後序遍歷二叉樹
- [資料結構]二叉樹的前中後序遍歷(遞迴+迭代實現)資料結構二叉樹遞迴
- 還原二叉樹(先序+中序-〉後序)二叉樹
- 二叉樹的前序、中序、後序三種遍歷二叉樹
- 144. 二叉樹的遍歷「前序、中序、後序」 Golang實現二叉樹Golang
- Java中用遞迴和迭代實現二叉樹的中序( InOrder )遍歷Java遞迴二叉樹
- 資料結構與演算法——二叉樹的前序遍歷,中序遍歷,後序遍歷資料結構演算法二叉樹
- 二叉樹的前序,中序,後序遍歷方法總結二叉樹
- 從中序與後序遍歷序列構造二叉樹二叉樹
- 先序、中序、後序序列的二叉樹構造演算法二叉樹演算法
- 資料結構初階--二叉樹(前中後序遍歷遞迴+非遞迴實現+相關求算結點實現)資料結構二叉樹遞迴
- 二叉樹的前中後序遍歷二叉樹
- 二叉樹先知道後序和中序,求先序二叉樹
- 388,先序遍歷構造二叉樹二叉樹
- 【樹01】對二叉樹前序/中序/後序遍歷演算法的一些思考二叉樹演算法
- 二叉樹建立及遍歷演算法(遞迴及非遞迴)二叉樹演算法遞迴
- 層序遍歷二叉樹二叉樹
- 【每日一題】二叉樹的前中後序非遞迴整理每日一題二叉樹遞迴
- 【資料結構與演算法】二叉樹的 Morris 遍歷(前序、中序、後序)資料結構演算法二叉樹
- 106. 從中序與後序遍歷序列構造二叉樹——Java實現二叉樹Java