php实现的二叉树遍历算法示例


Posted in PHP onJune 15, 2017

本文实例讲述了php实现的二叉树遍历算法。分享给大家供大家参考,具体如下:

今天使用php来实现二叉树的遍历

创建的二叉树如下图所示

php实现的二叉树遍历算法示例

php代码如下所示:

<?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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php 小乘法表实现代码
Jul 16 PHP
php操作sqlserver关于时间日期读取的小小见解
Nov 29 PHP
fleaphp rolesNameField bug解决方法
Apr 23 PHP
PHP动态生成javascript文件的2个例子
Apr 11 PHP
PHP防止post重复提交数据的简单例子
Jun 07 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
PHP中遇到的时区问题解决方法
Jul 23 PHP
PHP+Ajax 检测网络是否正常实例详解
Dec 16 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
Sep 26 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 #PHP
PHP中phar包的使用教程
Jun 14 #PHP
iis 7下安装laravel 5.4环境的方法教程
Jun 14 #PHP
PHP中关键字interface和implements详解
Jun 14 #PHP
详解php中的implements 使用
Jun 13 #PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
Jun 13 #PHP
php 中的closure用法详解
Jun 12 #PHP
You might like
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
php 使用array函数实现分页
2015/02/13 PHP
golang、python、php、c++、c、java、Nodejs性能对比
2017/03/12 NodeJs
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
javascript parseInt 函数分析(转)
2009/03/21 Javascript
javascript json2 使用方法
2010/03/16 Javascript
为Extjs加加速(javascript加速)
2010/08/19 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
详解python的sorted函数对字典按key排序和按value排序
2018/08/10 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
Python判断字符串是否为空和null方法实例
2020/04/26 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
J2EE中的容器都包括哪些
2013/08/21 面试题
大学生个人简历中的自我评价
2013/12/27 职场文书
最新的咖啡店创业计划书
2013/12/30 职场文书
村优秀党员事迹材料
2014/01/15 职场文书
幼儿园老师新年寄语2015
2014/12/08 职场文书
2015年小学数学教师个人工作总结
2015/05/25 职场文书
2019同学聚会主持词
2019/05/06 职场文书
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python
CSS3实现指纹特效代码
2022/03/17 HTML / CSS
中国十大神话动漫电影排行榜 哪吒登顶 白蛇缘起排第七
2022/03/21 国漫
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python