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 相关文章推荐
多数据表共用一个页的新闻发布
Oct 09 PHP
dede全站URL静态化改造[070414更正]
Apr 17 PHP
php压缩多个CSS为一个css的代码并缓存
Apr 21 PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 PHP
强烈声明: 不要使用(include/require)_once
Jun 06 PHP
php类中的各种拦截器用法分析
Nov 03 PHP
两种php给图片加水印的实现代码
Apr 18 PHP
深入解析WordPress中加载模板的get_template_part函数
Jan 11 PHP
ThinkPHP连接Oracle数据库
Apr 22 PHP
在PHP语言中使用JSON和将json还原成数组的方法
Jul 19 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
PHP7 新增功能
Mar 09 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 ajax 静态分页过程形式
2011/09/02 PHP
php 获取百度的热词数据的代码
2012/02/18 PHP
PHP-redis中文文档介绍
2013/02/07 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
PHP rsa加密解密算法原理解析
2020/12/09 PHP
Prototype Object对象 学习
2009/07/12 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
2013/08/09 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
使用console进行性能测试
2015/04/27 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
NodeJs 模仿SIP话机注册的方法
2019/06/21 NodeJs
如何利用JS将手机号中间四位变成*号
2020/09/29 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
Python版名片管理系统
2018/11/30 Python
Python 文件数据读写的具体实现
2020/01/24 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
后勤人员岗位职责
2013/12/17 职场文书
DIY手工制作经营店创业计划书
2014/02/01 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
人力资源职位说明书
2014/07/29 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
检讨书大全
2015/01/27 职场文书
施工现场安全管理制度
2015/08/05 职场文书
幼儿园亲子活动感想
2015/08/07 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
Nginx反向代理、重定向
2022/04/13 Servers