JavaShuo
欄目
標籤
php編程--二叉樹遍歷算法實現
時間 2019-12-07
標籤
php
編程
二叉樹
遍歷
算法
實現
欄目
PHP
简体版
原文
原文鏈接
今天使用php來實現二叉樹的遍歷
php
建立的二叉樹以下圖所示
node
php代碼以下所示:
spa
<?php
class
Node {
public $value;
public $child_left;
public $child_right;
}
final
class
Ergodic {
//前序遍歷:先訪問根節點,再遍歷左子樹,最後遍歷右子樹;而且在遍歷左右子樹時,仍需先遍歷根節點,而後訪問左子樹,最後遍歷右子樹
public
static
function
preOrder
($root){
$stack =
array();
array_push($stack, $root);
while(!
empty($stack)){
$center_node = array_pop($stack);
echo $center_node->value .
' ';
//先把右子樹節點入棧,以確保左子樹節點先出棧
if($center_node->child_right !=
null) array_push($stack, $center_node->child_right);
if($center_node->child_left !=
null) array_push($stack, $center_node->child_left);
}
}
//中序遍歷:先遍歷左子樹、而後訪問根節點,最後遍歷右子樹;而且在遍歷左右子樹的時候。仍然是先遍歷左子樹,而後訪問根節點,最後遍歷右子樹
public
static
function
midOrder
($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->child_left;
}
$center_node = array_pop($stack);
echo $center_node->value .
' ';
$center_node = $center_node->child_right;
}
}
//後序遍歷:先遍歷左子樹,而後遍歷右子樹,最後訪問根節點;一樣,在遍歷左右子樹的時候一樣要先遍歷左子樹,而後遍歷右子樹,最後訪問根節點
public
static
function
endOrder
($root){
$push_stack =
array();
$visit_stack =
array();
array_push($push_stack, $root);
while (!
empty($push_stack)) {
$center_node = array_pop($push_stack);
array_push($visit_stack, $center_node);
//左子樹節點先入$pushstack的棧,確保在$visitstack中先出棧
if ($center_node->child_left !=
null) array_push($push_stack, $center_node->child_left);
if ($center_node->child_right !=
null) array_push($push_stack, $center_node->child_right);
}
while (!
empty($visit_stack)) {
$center_node = array_pop($visit_stack);
echo $center_node->value .
' ';
}
}
}
//建立二叉樹
$a =
new Node();
$b =
new Node();
$c =
new Node();
$d =
new Node();
$e =
new Node();
$f =
new Node();
$g =
new Node();
$h =
new Node();
$i =
new Node();
$a->value =
'A';
$b->value =
'B';
$c->value =
'C';
$d->value =
'D';
$e->value =
'E';
$f->value =
'F';
$g->value =
'G';
$h->value =
'H';
$i->value =
'I';
$a->child_left = $b;
$a->child_right = $c;
$b->child_left = $d;
$b->child_right = $g;
$c->child_left = $e;
$c->child_right = $f;
$d->child_left = $h;
$d->child_right = $i;
//前序遍歷
Ergodic::preOrder($a);
//結果是:A B D H I G C E F
echo
'<br/>';
//中序遍歷
Ergodic::midOrder($a);
//結果是: H D I B G A E C F
echo
'<br/>';
//後序遍歷
Ergodic::endOrder($a);
//結果是: H I D G B E F C A
相關文章
1.
php編程--二叉樹遍歷算法實現
2.
二叉樹遍歷算法C++實現
3.
二叉樹遍歷算法
4.
二叉樹遍歷算法遞歸實現+層次遍歷
5.
二叉樹遍歷方法
6.
【數據結構和算法】【二叉樹】二叉樹遍歷的代碼實現
7.
遍歷二叉樹的九種算法
8.
二叉樹的四種遍歷算法
9.
算法之二叉樹各種遍歷
10.
二叉樹非遞歸遍歷算法
更多相關文章...
•
XML DOM 遍歷節點樹
-
XML DOM 教程
•
Hibernate整合EHCache實現二級緩存
-
Hibernate教程
•
C# 中 foreach 遍歷的用法
•
算法總結-二分查找法
相關標籤/搜索
遍歷二叉樹
PHP 實現算法
算法實現
LeetCode-二叉樹
二叉樹
遍歷
KMP算法實現
JAVA算法實現
算法python實現
平衡二叉樹
應用數學
PHP
PHP教程
紅包項目實戰
PHP參考手冊
算法
PHP
教程
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
ubantu 增加搜狗輸入法
2.
用實例講DynamicResource與StaticResource的區別
3.
firewall防火牆
4.
頁面開發之res://ieframe.dll/http_404.htm#問題處理
5.
[實踐通才]-Unity性能優化之Drawcalls入門
6.
中文文本錯誤糾正
7.
小A大B聊MFC:神奇的靜態文本控件--初識DC
8.
手扎20190521——bolg示例
9.
mud怎麼存東西到包_將MUD升級到Unity 5
10.
GMTC分享——當插件化遇到 Android P
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
php編程--二叉樹遍歷算法實現
2.
二叉樹遍歷算法C++實現
3.
二叉樹遍歷算法
4.
二叉樹遍歷算法遞歸實現+層次遍歷
5.
二叉樹遍歷方法
6.
【數據結構和算法】【二叉樹】二叉樹遍歷的代碼實現
7.
遍歷二叉樹的九種算法
8.
二叉樹的四種遍歷算法
9.
算法之二叉樹各種遍歷
10.
二叉樹非遞歸遍歷算法
>>更多相關文章<<