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 相关文章推荐
用mysql内存表来代替php session的类
Feb 01 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
PHP中round()函数对浮点数进行四舍五入的方法
Nov 19 PHP
php通过文件流方式复制文件的方法
Mar 13 PHP
微信公众平台之快递查询功能用法实例
Apr 14 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
May 22 PHP
Yii2 rbac权限控制之rule教程详解
Jun 23 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
Apr 26 PHP
PHP实现QQ登录的开原理和实现过程
Feb 04 PHP
PHP数组遍历的几种常见方式总结
Feb 15 PHP
Laravel统计一段时间间隔的数据方法
Oct 09 PHP
PHP实现简易图形计算器
Aug 28 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基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
2016/07/12 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
jquery制作搜狐快站页面效果示例分享
2014/02/21 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
vue2.0父子组件及非父子组件之间的通信方法
2017/01/21 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
SVG实现时钟效果
2018/07/17 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
详解在Angular4中使用ng2-baidu-map的方法
2019/06/19 Javascript
微信小程序返回上一页传参并刷新过程解析
2019/12/13 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
Django命名URL和反向解析URL实现解析
2019/08/09 Python
如何基于python操作excel并获取内容
2019/12/24 Python
python如何写出表白程序
2020/06/01 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
HTML5新增加标签和功能概述
2016/09/05 HTML / CSS
Saucony澳大利亚官网:美国跑鞋品牌,运动鞋中的劳斯莱斯
2018/05/05 全球购物
女生节标语
2014/06/26 职场文书
落实八项规定专题民主生活会对照检查材料
2014/09/15 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
活动宣传稿范文
2015/07/23 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python
Python绘制散点图之可视化神器pyecharts
2022/07/07 Python