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 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
社区(php&&mysql)一
Oct 09 PHP
隐性调用php程序的方法
Mar 09 PHP
用来解析.htgroup文件的PHP类
Sep 05 PHP
PHP APC的安装与使用详解
Jun 13 PHP
PHP中的按位与和按位或操作示例
Jan 27 PHP
php画图实例
Nov 05 PHP
php实现字符串反转输出的方法
Mar 14 PHP
如何用PHP来实现一个动态Web服务器
Jul 29 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
PHP笛卡尔积实现算法示例
Jul 30 PHP
php中访问修饰符的知识点总结
Jan 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
COM in PHP (winows only)
2006/10/09 PHP
坏狼php学习 计数器实例代码
2008/06/15 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
PHP异常处理Exception类
2015/12/11 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
php轻松实现文件上传功能
2016/03/03 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
jquery键盘事件介绍
2011/01/31 Javascript
jquery 插件学习(一)
2012/08/06 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
js 判断计算字符串长度/判断空的简单方法
2013/08/05 Javascript
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
2014/06/26 Javascript
JavaScript 基本概念
2015/01/20 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
AngularJs Understanding the Model Component
2016/09/02 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
vue-cli4使用全局less文件中的变量配置操作
2020/10/21 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
Django自定义分页效果
2017/06/27 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
python实现opencv+scoket网络实时图传
2020/03/20 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
怎样声明子类
2013/07/02 面试题
大学生优秀的自我评价分享
2013/10/22 职场文书
护士求职推荐信范文
2013/11/23 职场文书
最新大学职业规划书范文
2013/12/30 职场文书
交通工程专业推荐信
2014/09/06 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
世界遗产导游词
2015/02/13 职场文书
Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)
2021/05/24 Python
深入浅析Django MTV模式
2021/09/04 Python