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 相关文章推荐
Dedecms常用函数解析
Feb 01 PHP
php 图片上传类代码
Jul 17 PHP
php下使用iconv需要注意的问题
Nov 20 PHP
那些年一起学习的PHP(二)
Mar 21 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
PHP循环函数使用介绍之PHP基础入门教程
Sep 21 PHP
ThinkPHP的MVC开发机制实例解析
Aug 23 PHP
Apache连接PHP后无法启动问题解决思路
Jun 18 PHP
YII2 实现多语言配置的方法分享
Jan 11 PHP
Lumen timezone 时区设置方法(慢了8个小时)
Jan 20 PHP
PHP折半(二分)查找算法实例分析
May 12 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
Apr 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
PHP高级OOP技术演示
2009/08/27 PHP
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
jquery 滚动条事件简单实例
2013/07/12 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
layui 设置table 行的高度方法
2018/08/17 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
Python测试网络连通性示例【基于ping】
2018/08/03 Python
解决python "No module named pip" 的问题
2018/10/13 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
Django 路由控制的实现
2019/07/17 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
计算机专业毕业生自荐信
2013/12/31 职场文书
销售简历自我评价
2014/01/24 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
郭明义电影观后感
2015/06/08 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
小学英语教学反思范文
2016/02/15 职场文书