项目作者: vallentin

项目描述 :
Generic and lazy tree traversal algorithms
高级语言: Rust
项目地址: git://github.com/vallentin/traversal.git
创建时间: 2020-03-10T19:37:33Z
项目社区:https://github.com/vallentin/traversal

开源协议:MIT License

下载


traversal

Build Status
Build Status
Latest Version
Docs
License

Traversal implements generic and lazy tree traversal algorithms.

Includes:

Generic

Traversal uses generics (or type parameters) to be
flexible to use, and easy to implement and fit into existing
architecture.

Laziness

Laziness or lazy evaluation refers to evaluation being delayed
until needed.

Traversal delays processing Nodes and fetching child Nodes
until Iterator::next is called.
When next is called, then traversal only processes the
Nodes required for this iteration.

From Rust’s docs:

Iterators (and iterator adapters) are lazy. This means that just
creating an iterator doesn’t do a whole lot. Nothing really happens
until you call next.

Iterator - Laziness

Usage

Add this to your Cargo.toml:

  1. [dependencies]
  2. traversal = "0.1"

Releases

Release notes are available in the repo at CHANGELOG.md.

Algorithms

  1. A
  2. / \
  3. B C
  4. / \ / \
  5. D E F G

Given the above tree, then the following are the orders,
that each individual iterator / traversal algorithm produces.

Algorithm Order
Bft (Breadth-First Traversal) A, B, C, D, E, F, G
DftPre (Depth-First Traversal in Pre-Order) A, B, D, E, C, F, G
DftPost (Depth-First Traversal in Post-Order) D, E, B, F, G, C, A
DftPreRev (Reverse Depth-First Traversal in Pre-Order) G, F, C, E, D, B, A
DftPostRev (Reverse Depth-First Traversal in Post-Order) A, C, G, F, B, E, D

See each individual algorithm for code examples.

All Paths and Longest Paths

DftPaths and DftLongestPaths are utilities for
iterating all paths and the longest paths in a tree.

Given the same tree as the previous examples, then
DftPaths and DftLongestPaths produce the
following paths.

DftPaths:

  • A, B
  • A, B, D
  • A, B, E
  • A, C
  • A, C, F
  • A, C, G

DftLongestPaths:

  • A, B, D
  • A, B, E
  • A, C, F
  • A, C, G

See each individual algorithm for code examples.

Cycles

  1. A <---+
  2. / \ |
  3. B D >-+
  4. | | |
  5. C E >-+

DftCycles:

  • A -> D (implies D is connected with A)
  • A -> D -> E

See each individual algorithm for code examples.