loophp/phptree

树数据结构的实现

维护者

详细信息

github.com/loophp/phptree

源代码

问题

资助包维护!
drupol

2.6.8 2022-01-20 09:56 UTC

README

Latest Stable Version GitHub stars Total Downloads GitHub Workflow Status Scrutinizer code quality Type Coverage Code Coverage Mutation testing badge License Donate!

PhpTree

描述

PHP实现树数据结构。

它提供了不同的树实现

  • 节点:基本类。
  • N-叉节点:(或K-叉树)扩展基本类,允许您指定节点的容量,一个节点可以拥有的最大子节点数。
  • 值节点:扩展N-叉节点,允许您将值附加到节点。
  • 键值节点:扩展值节点,允许您将键和值附加到节点。
  • 字典树节点:扩展键值节点,是一个简单的字典树
  • 自动平衡节点:扩展N-叉节点,并尽可能使树对称。一旦添加子节点,就会自动平衡所有子节点。
  • Merkle节点:一个树,其中每个非叶节点都标记为其子节点标签的加密哈希。

4种树遍历算法:

  • 顺序
  • 后序
  • 前序
  • 广度优先

导出器和导入器

  • Ascii:将树导出为ASCII图形,仅用于炫酷和可视化。
  • Graph:使用graphp/graphp库将树导出为Graph。
  • GraphViz:将树导出为GraphViz格式的脚本。
  • Text:将树导出为简单字符串,易于存储在数据库中。
  • nikic/php-ast:从由PHP扩展AST生成的AST导入树。
  • nikic/php-parser:从由nikic/php-parser生成的AST导入树。
  • microsoft/tolerant-php-parser:从由microsoft/tolerant-php-parser生成的AST导入树。

修改器

  • 反转:反转树,所有子节点都镜像。

文档

博客文章:https://not-a-number.io/2018/phptree-a-fast-tree-implementation

变更日志

CHANGELOG.MD

要求

  • PHP >= 7.1

安装

composer require loophp/phptree

可选包

用法

<?php

declare(strict_types = 1);

use loophp\phptree\Exporter\Gv;
use loophp\phptree\Exporter\Image;
use loophp\phptree\Node\ValueNode;
use loophp\phptree\Exporter\Text;
use loophp\launcher\Launcher;

include './vendor/autoload.php';

// Create the root node.
$tree = new ValueNode('root', 2);

$nodes = [];
foreach (\range('A', 'Z') as $v) {
    $nodes[] = new ValueNode($v, 2);
}

// Add children to the root node.
$tree->add(...$nodes);

// Export to text.
$textExporter = new Text();
$textExporter->export($tree); // [root[A[C[G[O][P]][H[Q][R]]][D[I[S][T]][J[U][V]]]][B[E[K[W][X]][L[Y][Z]]][F[M][N]]]]⏎

// Export to a GraphViz script with the Gv exporter
$graphvizExporter = new Gv();
$dotScript = $graphvizExporter->export($tree);
file_put_contents('tree.dot', $dotScript);
// Then do "dot -Tsvg tree.dot -o tree.svg" to export in SVG.

// Or use the Image exporter that does it for you.
$imageExporter = new Image();
$imageContent = $imageExporter->setFormat('png')->export($tree);
file_put_contents('tree.png', $imageContent);

// If you want to launch the image, you can use an optional package.
// do: composer require drupol/launcher
// then:
Launcher::open('tree.png');

代码质量、测试和基准测试

每次将更改引入库时,Github都会运行测试和基准测试。

库使用PHPSpec编写的测试。请随意在spec目录中检查它们。运行composer phpspec以触发测试。

每次提交之前,都会使用GrumPHP进行一些检查,通过执行./vendor/bin/grumphp run进行手动检查。

使用PHPBench来对库进行基准测试,运行基准测试的命令是:composer bench

使用PHPInfection来确保您的代码得到适当的测试,运行composer infection来测试您的代码。

贡献

请随意通过发送pull请求来贡献。我们通常是一个非常反应迅速的团队,我们会从开始到结束帮助您通过pull请求。

由于某些原因,如果您无法对代码进行贡献但愿意帮忙,赞助是一个好、合理且安全的方式来表达对我们在这款包上投入时间的感激之情。

Github上赞助我,或者赞助任何贡献者

变更日志

请参阅CHANGELOG.md以查看基于git提交的变更日志。

请检查发布变更日志以获取更详细的变更日志。