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模拟SQL Server的两个日期处理函数
Oct 09 PHP
php生成文件
Jan 15 PHP
从一个不错的留言本弄的mysql数据库操作类
Sep 02 PHP
PHP 用数组降低程序的时间复杂度
Dec 04 PHP
基于Zend的Config机制的应用分析
May 02 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
May 10 PHP
PHP中的Trait 特性及作用
Apr 03 PHP
用PHP写的一个冒泡排序法的函数简单实例
May 26 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
PHP数据分析引擎计算余弦相似度算法示例
Aug 08 PHP
PHP使用file_get_contents发送http请求功能简单示例
Apr 29 PHP
PHP批斗大会之缺失的异常详解
Jul 09 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/03 咖啡文化
PHP cron中的批处理
2008/09/16 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
2019/06/12 PHP
php源码的安装方法和实例
2019/09/26 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
JavaScript 语言的递归编程
2010/05/18 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
Jquery倒计时源码分享
2014/05/16 Javascript
用js闭包的方法实现多点标注冒泡示例
2014/05/29 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
js实现添加删除表格(两种方法)
2017/04/27 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
vue3使用vue-count-to组件的实现
2020/12/25 Vue.js
Python自动登录126邮箱的方法
2015/07/10 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
使用 Supervisor 监控 Python3 进程方式
2019/12/05 Python
基于TensorFlow常量、序列以及随机值生成实例
2020/01/04 Python
pycharm的python_stubs问题
2020/04/08 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
总经理助理的八要求
2013/11/12 职场文书
关于抽烟的检讨书
2014/02/25 职场文书
2014三八妇女节活动总结
2014/03/01 职场文书
家长写给孩子的评语
2014/04/18 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
文艺晚会开场白
2015/05/29 职场文书