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安装问题
Oct 09 PHP
php Rename 更改文件、文件夹名称
May 24 PHP
php解析json数据实例
Aug 19 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
Oct 13 PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 PHP
使用JavaScript创建新样式表和新样式规则
Jun 14 PHP
php组合排序简单实现方法
Oct 15 PHP
PHP环形链表实现方法示例
Sep 15 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
通过源码解析Laravel的依赖注入
Jan 22 PHP
PHP的Trait机制原理与用法分析
Oct 18 PHP
PHP中->和=>的含义及使用示例解析
Aug 06 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中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
php如何获取Http请求
2020/04/30 PHP
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
自己做的模拟模态对话框实现代码
2012/05/23 Javascript
datagrid框架的删除添加与修改
2013/04/08 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
JS实现仿微博可关闭弹出层效果
2015/09/21 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
一览画面点击复选框后获取多个id值的方法
2016/05/30 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
p5.js实现斐波那契螺旋的示例代码
2018/03/22 Javascript
微信小程序实现吸顶效果
2020/01/08 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
2020/08/04 Javascript
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Django中几种重定向方法
2015/04/28 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
python 实现线程之间的通信示例
2020/02/14 Python
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
英国内衣连锁店:Boux Avenue
2018/01/24 全球购物
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
美国领先的机场停车聚合商:Airport Parking Reservations
2020/02/28 全球购物
Shell如何接收变量输入
2016/08/06 面试题
财务会计应届生求职信
2013/11/24 职场文书
证婚人搞笑证婚词
2014/01/10 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
意外伤害赔偿协议书范本
2014/09/28 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript