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函数utf8转gb2312编码
Dec 21 PHP
php中目录,文件操作详谈
Mar 19 PHP
php为什么选mysql作为数据库? Mysql 创建用户方法
Jul 02 PHP
浅析php中常量,变量的作用域和生存周期
Aug 10 PHP
PHP5.3与5.5废弃与过期函数整理汇总
Jul 10 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
学习php设计模式 php实现合成模式(composite)
Dec 08 PHP
一个简单的php MVC留言本实例代码(必看篇)
Sep 22 PHP
php实现图片以base64显示的方法
Oct 13 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
Feb 15 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
通过PHP实现用户注册后邮箱验证激活
Nov 10 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
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
PHP中获取文件扩展名的N种方法小结
2012/02/27 PHP
jquery简单体验
2007/01/10 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
jquery foreach使用示例
2013/09/12 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
浅谈javascript的闭包
2017/01/23 Javascript
Angular 4环境准备与Angular cli创建项目详解
2017/05/27 Javascript
限时抢购-倒计时的完整实例(分享)
2017/09/17 Javascript
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
Python使用Selenium+BeautifulSoup爬取淘宝搜索页
2018/02/24 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
Python多线程多进程实例对比解析
2020/03/12 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
20行Python代码实现视频字符化功能
2020/04/13 Python
python爬虫如何解决图片验证码
2021/02/14 Python
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
应届毕业生求职信范文分享
2013/12/26 职场文书
竞争上岗实施方案
2014/03/21 职场文书
股东协议书范本
2014/04/14 职场文书
考博专家推荐信
2014/05/10 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
质检员岗位职责范本
2015/04/07 职场文书
回复函格式及范文
2015/07/14 职场文书
校运会通讯稿
2015/07/18 职场文书
小区物业管理2015年度工作总结
2015/10/22 职场文书
班级管理经验交流材料
2015/11/02 职场文书