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 相关文章推荐
动态生成gif格式的图像要注意?
Oct 09 PHP
PHP chmod 函数与批量修改文件目录权限
May 10 PHP
10条PHP高级技巧[修正版]
Aug 02 PHP
PHP数据类型之布尔型的介绍
Apr 28 PHP
php解析html类库simple_html_dom(详细介绍)
Jul 05 PHP
PHP获取文件相对路径的方法
Feb 26 PHP
浅谈PHP中JSON数据操作
Jul 01 PHP
php实现图片缩略图的方法
Mar 29 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
yii gridview实现时间段筛选功能
Aug 15 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 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
Linux下进行MYSQL编程时插入中文乱码的解决方案
2007/03/15 PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
2010/04/13 PHP
PHP循环函数使用介绍之PHP基础入门教程
2013/09/21 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
用户注册常用javascript代码
2009/08/29 Javascript
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
详解JS模块导入导出
2017/12/20 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
Python中的hypot()方法使用简介
2015/05/18 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
Pycharm之快速定位到某行快捷键的方法
2019/01/20 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
python 录制系统声音的示例
2020/12/21 Python
教师先进工作者事迹材料
2014/05/01 职场文书
暑假学习心得体会
2014/09/02 职场文书
教师师德考核自我评价
2014/09/13 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
酒店财务部岗位职责
2015/04/14 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书
Django框架中模型的用法
2022/06/10 Python
Hive HQL支持2种查询语句风格
2022/06/25 数据库