PHP构造二叉树算法示例


Posted in PHP onJune 21, 2017

树(Tree)在数据结构还是很重要的,这里表示二叉树用括号表示法表示。先写一个二叉树节点类:

// 二叉树节点
class BTNode {
  public $data;

  public $lchild = NULL;

  public $rchild = NULL;

  public function __construct($data) {
    $this->data = $data;
  }
}

然后构造二叉树:

function CreateBTNode(&$root,string $str)
{
  $strArr = str_split($str);
  $stack = [];
  $p = NULL; // 指针
  $top = -1;
  $k = $j = 0;
  $root = NULL;
  foreach ($strArr as $ch) {
    switch ($ch) {
      case '(':
        $top++;
        array_push($stack, $p);
        $k = 1;
        break;
      case ')':
        array_pop($stack);
        break;
      case ',':
        $k = 2;
        break;
      default:
        $p = new BTNode($ch);
        if($root == NULL) {
          $root = $p;
        } else {
          switch ($k) {
            case 1:
              end($stack)->lchild = $p;
              break;
            case 2:
              end($stack)->rchild = $p;
              break;
          }
        }
        break;
    }
  }
}

这里写上一个打印二叉树的函数(中序遍历):

function PrintBTNode($node)
{
  if($node != NULL) {
    PrintBTNode($node->lchild);
    echo $node->data;
    PrintBTNode($node->rchild);
  }
}

运行结果:

输入一个字符串
"A(B(C,D),G(F))"

PHP构造二叉树算法示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php 文章采集正则代码
Dec 28 PHP
php数字游戏 计算24算法
Jun 10 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
PHP中构造函数和析构函数解析
Oct 10 PHP
彻底删除thinkphp3.1案例blog标签的方法
Dec 05 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
php的4种常用运行方式详解
Dec 22 PHP
PHP中时间加减函数strtotime用法分析
Apr 26 PHP
php检测mysql表是否存在的方法小结
Jul 20 PHP
php-fpm服务启动脚本的方法
Apr 27 PHP
PHP自动载入类文件函数__autoload的使用方法
Mar 25 PHP
php session_decode函数用法讲解
May 26 PHP
ThinkPHP删除栏目(实现批量删除栏目)
Jun 21 #PHP
php基于SQLite实现的分页功能示例
Jun 21 #PHP
PHP面向对象之领域模型+数据映射器实例(分析)
Jun 21 #PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
Jun 21 #PHP
老生常谈PHP面向对象之标识映射
Jun 21 #PHP
PHP封装的PDO数据库操作类实例
Jun 21 #PHP
PHP基于ORM方式操作MySQL数据库实例
Jun 21 #PHP
You might like
php数据库连接
2006/10/09 PHP
php xml文件操作代码(一)
2009/03/20 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
yii2局部关闭(开启)csrf的验证的实例代码
2017/07/10 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
使用angular写一个hello world
2015/01/23 Javascript
JS实现的自定义右键菜单实例二则
2015/09/01 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
vue实现动态数据绑定
2017/04/28 Javascript
详谈表单重复提交的三种情况及解决方法
2017/08/16 Javascript
深入理解Vue.js轻量高效的前端组件化方案
2018/12/10 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
用实例解释Python中的继承和多态的概念
2015/04/27 Python
python实现上传下载文件功能
2020/11/19 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
.NET面试问题集
2015/12/08 面试题
劳资专员岗位职责
2013/12/27 职场文书
运动会广播稿400字
2014/01/25 职场文书
安全大检查反思材料
2014/01/31 职场文书
环境工程专业自荐信
2014/03/03 职场文书
地球一小时倡议书
2014/04/15 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
人事文员岗位职责
2015/02/04 职场文书
就业证明函
2015/06/17 职场文书
导游词之包公祠
2019/11/25 职场文书
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python
Android 中的类文件和类加载器详情
2022/06/05 Java/Android