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

 更新时间:2017年06月15日 10:10:54   作者:aarontong00  
这篇文章主要介绍了php实现的二叉树遍历算法,结合具体实例形式分析了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基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

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

相关文章

  • Laravel Eloquent ORM高级部分解析

    Laravel Eloquent ORM高级部分解析

    这篇文章主要为大家介绍了Laravel Eloquent ORM高级部分解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • php实现批量删除挂马文件及批量替换页面内容完整实例

    php实现批量删除挂马文件及批量替换页面内容完整实例

    这篇文章主要介绍了php实现批量删除挂马文件及批量替换页面内容的方法,涉及php文件与目录的遍历、查找以及字符串与数组的遍历与替换操作相关技巧,适用于utf-8编码环境,需要的朋友可以参考下
    2016-07-07
  • PHP实现的下载远程文件类定义与用法示例

    PHP实现的下载远程文件类定义与用法示例

    这篇文章主要介绍了PHP实现的下载远程文件类定义与用法,结合具体实例形式分析了php封装的下载远程文件操作类定义及使用方法,需要的朋友可以参考下
    2017-07-07
  • php数组函数序列之rsort() - 对数组的元素值进行降序排序

    php数组函数序列之rsort() - 对数组的元素值进行降序排序

    rsort() 函数对数组的元素按照键值进行逆向排序。与 arsort() 的功能基本相同。注释:该函数为 array 中的单元赋予新的键名。这将删除原有的键名而不仅是重新排序。
    2011-11-11
  • php命名空间设计思想、用法与缺点分析

    php命名空间设计思想、用法与缺点分析

    这篇文章主要介绍了php命名空间设计思想、用法与缺点,结合实例形式分析了php命名空间的概念、用法及相关的操作注意事项,并给出了使用建议,需要的朋友可以参考下
    2019-07-07
  • PHP浮点比较大小的方法

    PHP浮点比较大小的方法

    这篇文章主要介绍了PHP浮点比较大小的方法,涉及PHP数字及字符串的转换与比较相关技巧,需要的朋友可以参考下
    2016-02-02
  • php json与xml序列化/反序列化

    php json与xml序列化/反序列化

    在WEB开发中,php对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化。今天我们就来看看是如何用的。
    2013-10-10
  • php实现过滤UBB代码的类

    php实现过滤UBB代码的类

    这篇文章主要介绍了php实现过滤UBB代码的类,涉及php正则表达式的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • PHP多个文件上传到服务器实例

    PHP多个文件上传到服务器实例

    这篇文章主要介绍了PHP多个文件上传到服务器的实现方法,以实例形式详细讲解了多文件传递过程中的数组应用及数据遍历上传等技巧,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • php设计模式 Proxy (代理模式)

    php设计模式 Proxy (代理模式)

    为其他对象提供一个代理以控制这个对象的访问
    2011-06-06

最新评论