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
C# Assembly类访问程序集信息
Jun 13 PHP
自动把纯文本转换成Web页面的php代码
Aug 27 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
Jul 01 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
Feb 24 PHP
PHP调用JAVA的WebService简单实例
Mar 11 PHP
CI框架中cookie的操作方法分析
Dec 12 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
Sep 22 PHP
PHP简单遍历对象示例
Sep 28 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 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
Smarty中常用变量操作符汇总
2014/10/27 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
2014/12/18 PHP
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
2018/06/09 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
详解基于angular-cli配置代理解决跨域请求问题
2017/07/05 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
AngularJS 多指令Scope问题的解决
2018/10/25 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
解决removeEventListener 无法清除监听的问题
2020/10/30 Javascript
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
Python装饰器用法实例总结
2018/02/07 Python
Python基本类型的连接组合和互相转换方式(13种)
2019/12/16 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
Python中的全局变量如何理解
2020/06/04 Python
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
前台文员岗位职责
2013/12/28 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server