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对gzip文件或者字符串解压实例参考
Jul 25 PHP
PHP中foreach循环中使用引用要注意的地方
Jan 02 PHP
使用PHP下载CSS文件中的图片的代码
Sep 24 PHP
php获取从html表单传递数组的方法
Mar 20 PHP
PHP代码维护,重构变困难的4种原因分析
Jan 25 PHP
基于php实现的验证码小程序
Dec 13 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
Apr 07 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
Aug 14 PHP
PHP常用日期加减计算方法实例小结
Jul 31 PHP
PHP基于面向对象封装的分页类示例
Mar 15 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 PHP
PHP开发api接口安全验证操作实例详解
Mar 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 反射机制实现动态代理的代码
2008/10/22 PHP
php实现字符串翻转的方法
2015/03/27 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
javascript import css实例代码
2008/07/18 Javascript
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
2012/03/01 Javascript
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
jQuery实现大转盘抽奖活动仿QQ音乐代码分享
2015/08/21 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
JS实现简单移动端鼠标拖拽
2020/07/23 Javascript
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
2019/02/19 Python
python读取ini配置的类封装代码实例
2020/01/08 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
Django用户身份验证完成示例代码
2020/04/03 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
龟牌英国商店:Turtle Wax Brand Store UK
2019/07/02 全球购物
介绍一下gcc特性
2015/10/31 面试题
高级工程师岗位职责
2013/12/15 职场文书
房地产广告策划方案
2014/05/15 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
信息技术国培研修日志
2015/11/13 职场文书
Pycharm连接远程服务器并远程调试的全过程
2021/06/24 Python
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js
python​格式化字符串
2022/04/20 Python
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android