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自定义函数返回多个值
Nov 26 PHP
php基础知识:类与对象(2) 自动加载对象
Dec 13 PHP
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
Aug 26 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
Jan 15 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
PHP之认识(二)关于Traits的用法详解
Apr 11 PHP
Laravel框架实现简单的学生信息管理平台案例
May 07 PHP
php中的钩子理解及应用实例分析
Aug 30 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 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&&mysql)三
2006/10/09 PHP
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
PHP中header用法小结
2016/05/23 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
PHP中session跨子域的三种实现方法
2016/07/25 PHP
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
Winform客户端向web地址传参接收参数的方法
2016/05/17 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
2016/06/24 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
2018/09/17 Javascript
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
Python学习笔记_数据排序方法
2014/05/22 Python
Python发送Email方法实例
2014/08/21 Python
通过C++学习Python
2015/01/20 Python
python中实现php的var_dump函数功能
2015/01/21 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
python做接口测试的必要性
2019/11/20 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
python如何将图片转换素描画
2020/09/08 Python
如何用Python绘制3D柱形图
2020/09/16 Python
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
物流管理专业职业生涯规划书
2014/01/06 职场文书
幼儿园亲子活动方案
2014/01/29 职场文书
三人合伙协议书范本
2014/10/29 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
门市房租房协议书
2014/12/04 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书
导游词之无锡唐城
2019/12/12 职场文书
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python