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实现多服务器session共享之NFS共享的方法
Mar 16 PHP
PHP file_exists问题杂谈
May 07 PHP
php分页函数示例代码分享
Feb 24 PHP
PHP实现的多彩标签效果代码分享
Aug 21 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
Nov 15 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
Nov 18 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
Jan 07 PHP
试用php中oci8扩展
Jun 18 PHP
实现PHP搜索加分页
Oct 12 PHP
php中引用&的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
Yii2框架中一些折磨人的坑
Dec 15 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/01 无线电
php抽象方法和抽象类实例分析
2016/12/07 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
Node.js连接postgreSQL并进行数据操作
2016/12/18 Javascript
实例详解JSON取值(key是中文或者数字)方式
2017/08/24 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
详解从买域名到使用pm2部署node.js项目全过程
2018/03/07 Javascript
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
JQuery常见节点操作实例分析
2019/05/15 jQuery
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
JavaScript RegExp 对象用法详解
2019/09/24 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python数据结构树和二叉树简介
2014/04/29 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
Monnier Freres中文官网:法国领先的奢侈品配饰在线零售商
2017/11/01 全球购物
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
中学自我评价
2014/01/31 职场文书
企业年度评优方案
2014/06/02 职场文书
党员教师个人对照检查材料(群众路线)
2014/09/26 职场文书
单位授权委托书范本
2014/09/26 职场文书
西湖英语导游词
2015/02/06 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
李强感恩观后感
2015/06/17 职场文书
党员身份证明材料
2015/06/19 职场文书
教导处教学工作总结
2015/08/12 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
php修改word的实例方法
2021/11/17 PHP
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python