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 Session变量不能传送到下一页的解决方法
Nov 27 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
php算法实例分享
Jul 14 PHP
PHP图像裁剪缩略裁切类源码及使用方法
Jan 07 PHP
PHP6新特性分析
Mar 03 PHP
php使用正则表达式去掉html中的注释方法
Nov 03 PHP
php加密之discuz内容经典加密方式实例详解
Feb 04 PHP
PHP中include和require的区别实例分析
May 07 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 PHP
Laravel-admin之修改操作日志的方法
Sep 30 PHP
php libevent 功能与使用方法详解
Mar 04 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设计模式 Factory(工厂模式)
2011/06/26 PHP
PHP spl_autoload_register实现自动加载研究
2011/12/06 PHP
PHP 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
PHP图片处理之图片旋转和图片翻转实例
2014/11/19 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
javascript运行机制之this详细介绍
2014/02/07 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
Node.js实现文件上传
2016/07/05 Javascript
利用BootStrap的Carousel.js实现轮播图动画效果
2016/12/21 Javascript
基于jQuery制作小图标上下滑动特效
2017/01/18 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
vue mounted 调用两次的完美解决办法
2018/10/29 Javascript
layui实现数据表格自定义数据项
2019/10/26 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
深入了解Python数据类型之列表
2016/06/24 Python
简单谈谈Python中的闭包
2016/11/30 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
python psutil监控进程实例
2019/12/17 Python
Python pip 常用命令汇总
2020/10/19 Python
个人生活学习自我评价范文
2013/11/26 职场文书
优秀班主任申报材料
2014/12/16 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android