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 相关文章推荐
xajax写的留言本
Nov 25 PHP
PHP无限分类的类
Jan 02 PHP
php adodb操作mysql数据库
Mar 19 PHP
用mysql_fetch_array()获取当前行数据的方法详解
Jun 05 PHP
解析php中memcache的应用
Jun 18 PHP
php加密解密实用类分享
Jan 07 PHP
php 伪静态之IIS篇
Jun 02 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 PHP
php的GD库imagettftext函数解决中文乱码问题
Jan 24 PHP
分享五个PHP7性能优化提升技巧
Dec 07 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
Jan 07 PHP
PHP代码覆盖率统计详解
Jul 22 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
理解PHP5中static和const关键字的区别
2007/03/19 PHP
nginx+php-fpm配置文件的组织结构介绍
2012/11/07 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
JavaScript 参数中的数组展开 [译]
2012/09/21 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
2016/11/03 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/27 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
150行Python代码实现带界面的数独游戏
2020/04/04 Python
python模拟实现分发扑克牌
2020/04/22 Python
python如何写出表白程序
2020/06/01 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
html5 canvas-2.用canvas制作一个猜字母的小游戏
2013/01/07 HTML / CSS
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
荷兰音乐会和音乐剧门票订购网站:Topticketshop
2019/08/27 全球购物
如何处理简单的PHP错误
2015/10/14 面试题
应届生污水处理求职信
2013/11/06 职场文书
接受捐赠答谢词
2014/01/27 职场文书
普罗米修斯教学反思
2014/02/06 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
通知函格式范文
2015/04/27 职场文书
订货会主持词
2015/07/01 职场文书
nginx实现动静分离的方法示例
2021/11/07 Servers
聊聊Python String型列表求最值的问题
2022/01/18 Python
MySQL的InnoDB存储引擎的数据页结构详解
2022/03/03 MySQL
Python经常使用的一些内置函数
2022/04/11 Python
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
2022/04/19 Java/Android