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.
resiprocate 之repro使用
2.
Ubuntu配置Github并且新建仓库push代码,从已有仓库clone代码,并且push
3.
设计模式9——模板方法模式
4.
avue crud form组件的快速配置使用方法详细讲解
5.
python基础B
6.
从零开始···将工程上传到github
7.
Eclipse插件篇
8.
Oracle网络服务 独立监听的配置
9.
php7 fmp模式
10.
第5章 Linux文件及目录管理命令基础
本站公众号
欢迎关注本站公众号,获取更多信息
相关文章
1.
php编程--二叉树遍历算法实现
2.
二叉树遍历算法C++实现
3.
二叉树遍历算法
4.
二叉树遍历算法递归实现+层次遍历
5.
二叉树遍历方法
6.
【数据结构和算法】【二叉树】二叉树遍历的代码实现
7.
遍历二叉树的九种算法
8.
二叉树的四种遍历算法
9.
算法之二叉树各种遍历
10.
二叉树非递归遍历算法
>>更多相关文章<<