Generic and lazy tree traversal algorithms
Traversal implements generic and lazy tree traversal algorithms.
Includes:
Bft
)DftPre
)DftPost
)DftPreRev
)DftPostRev
)DftPaths
)DftLongestPaths
)DftCycles
)Traversal uses generics (or type parameters) to be
flexible to use, and easy to implement and fit into existing
architecture.
Laziness or lazy evaluation refers to evaluation being delayed
until needed.
Traversal delays processing Node
s and fetching child Node
s
until Iterator::next
is called.
When next
is called, then traversal only processes theNode
s 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 callnext
.
Add this to your Cargo.toml
:
[dependencies]
traversal = "0.1"
Release notes are available in the repo at CHANGELOG.md.
A
/ \
B C
/ \ / \
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.
DftPaths
and DftLongestPaths
are utilities for
iterating all paths and the longest paths in a tree.
Given the same tree as the previous examples, thenDftPaths
and DftLongestPaths
produce the
following paths.
See each individual algorithm for code examples.
A <---+
/ \ |
B D >-+
| | |
C E >-+
See each individual algorithm for code examples.