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&MYSQL服务器配置说明
Oct 09 PHP
php生成随机密码的几种方法
Jan 17 PHP
简单的php写入数据库类代码分享
Jul 26 PHP
php 带逗号千位符数字的处理方法
Jan 10 PHP
php环境下利用session防止页面重复刷新的具体实现
Jan 09 PHP
PHP中的命名空间相关概念浅析
Jan 22 PHP
php中file_exists函数使用详解
May 08 PHP
PHP中的事务使用实例
May 26 PHP
php结合web uploader插件实现分片上传文件
May 10 PHP
PDO::inTransaction讲解
Jan 28 PHP
php创建类并调用的实例方法
Sep 25 PHP
PHP 实现base64编码文件上传出现问题详解
Sep 01 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
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
PHP文件下载类
2006/12/06 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
php获取给定日期相差天数的方法分析
2017/02/20 PHP
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
JQuery中使文本框获得焦点的方法实例分析
2015/02/28 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
JS实现的几个常用算法
2016/11/12 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
node.js通过url读取文件
2020/10/16 Javascript
[01:04]DOTA2上海特锦赛现场采访 FreeAgain遭众解说围攻
2016/03/25 DOTA
python实现跨文件全局变量的方法
2014/07/07 Python
python 标准差计算的实现(std)
2019/07/29 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
大专生的学习自我评价
2013/12/04 职场文书
小学生防溺水广播稿
2014/01/12 职场文书
招聘与培训专员岗位职责
2014/01/30 职场文书
本科毕业自我鉴定
2014/03/20 职场文书
学校安全管理责任书
2014/07/23 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
班主任寄语2016
2015/12/04 职场文书
Django一小时写出账号密码管理系统
2021/04/29 Python
如何使用PyCharm及常用配置详解
2021/06/03 Python
JavaScript实现音乐播放器
2022/08/14 Javascript