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 正则匹配函数体
Aug 25 PHP
PHPWind 发帖回帖Api PHP版打包下载
Feb 08 PHP
php中选择什么接口(mysql、mysqli)访问mysql
Feb 06 PHP
5种PHP创建数组的实例代码分享
Jan 17 PHP
qq登录,新浪微博登录接口申请过程中遇到的问题
Jul 22 PHP
利用PHP生成静态html页面的原理
Sep 30 PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
php微信分享到朋友圈、QQ、朋友、微博
Feb 18 PHP
php intval函数用法总结
Apr 14 PHP
php实现分页功能的详细实例方法
Sep 29 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
国内咖啡文化
2021/03/03 咖啡文化
phpmyadmin 常用选项设置详解版
2010/03/07 PHP
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
php使用APC实现实时上传进度条功能
2015/10/26 PHP
PHP生成和获取XML格式数据的方法
2016/03/04 PHP
jQuery 表单验证扩展代码(一)
2010/10/11 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
js的三种继承方式详解
2017/01/21 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
2018/05/23 jQuery
element el-input directive数字进行控制
2018/10/11 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
Python监控主机是否存活并以邮件报警
2015/09/22 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
Draper James官网:知名演员瑞茜·威瑟斯彭所创品牌
2017/10/25 全球购物
自我鉴定范文
2013/11/10 职场文书
说明书范文
2014/05/07 职场文书
施工工地安全标语
2014/06/07 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
民事赔偿协议书
2014/11/02 职场文书
护士辞职信怎么写
2015/02/27 职场文书