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将向Java靠拢
Oct 09 PHP
PHP 简单日历实现代码
Oct 28 PHP
国外比较好的几个的Php开源建站平台小结
Apr 22 PHP
php中将网址转换为超链接的函数
Sep 02 PHP
探讨PHP中OO之静态关键字以及类常量的详解
Jun 07 PHP
微信营销平台系统?刮刮乐的开发
Jun 10 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
Jul 24 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
PHP汉字转换拼音的函数代码
Dec 30 PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 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
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
2014/06/06 PHP
php转换颜色为其反色的方法
2015/04/27 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
JS面向对象、prototype、call()、apply()
2009/05/14 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
JavaScript DOM事件(笔记)
2015/04/08 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
2016/06/21 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
vue项目中实现的微信分享功能示例
2019/01/21 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
python中的列表与元组的使用
2019/08/08 Python
Python  word实现读取及导出代码解析
2020/07/09 Python
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
高一军训的心得体会
2014/09/01 职场文书
2014年教育工作总结
2014/11/26 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书
惊天动地观后感
2015/06/10 职场文书
Python测试框架pytest高阶用法全面详解
2022/06/01 Python