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中的时间显示
Jan 18 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
Dec 19 PHP
PHP file_get_contents设置超时处理方法
Sep 30 PHP
php中{}大括号是什么意思
Dec 01 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
May 10 PHP
php中创建和调用webservice接口示例
Jul 25 PHP
thinkphp中字符截取函数msubstr()用法分析
Jan 09 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
Jan 11 PHP
PHP读取大文件的多种方法介绍
Apr 04 PHP
详谈PHP面向对象中常用的关键字和魔术方法
Feb 04 PHP
Yii框架分页技术实例分析
Aug 30 PHP
让whoops帮我们告别ThinkPHP6的异常页面
Mar 02 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的Reflection反射机制
2014/08/05 PHP
JQuery 弹出框定位实现方法
2010/12/02 Javascript
js修改table中Td的值(定义td的双击事件)
2013/01/10 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
node.js中的http.response.setHeader方法使用说明
2014/12/14 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
Vuejs 2.0 子组件访问/调用父组件的方法(示例代码)
2018/02/08 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
详解使用React制作一个模态框
2019/03/14 Javascript
vue数据初始化initState的实例详解
2019/04/11 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
Python编程pygal绘图实例之XY线
2017/12/09 Python
python获取中文字符串长度的方法
2018/11/14 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
CSS3 text shadow字体阴影效果
2016/01/08 HTML / CSS
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
台湾良兴购物网:EcLife
2019/12/01 全球购物
美国踏板车和轻便摩托车销售网站:Mega Motor Madness
2020/02/26 全球购物
意大利包包和行李箱销售网站:Bagaglio.it
2021/03/02 全球购物
大二自我鉴定范文
2013/10/05 职场文书
法律专业推荐信范文
2013/11/29 职场文书
公司保密承诺书
2014/03/27 职场文书
班干部演讲稿
2014/04/24 职场文书
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫
Python可视化神器pyecharts之绘制地理图表练习
2022/07/07 Python
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技