2 个版本
| 0.1.2 | 2020年3月13日 |
|---|---|
| 0.1.1 |
|
| 0.1.0 | 2020年3月11日 |
#1338 在 算法
1,138 每月下载量
用于 vmf_parser_nom
73KB
999 行
遍历
遍历实现了通用和懒加载的树遍历算法。
包含
- 广度优先遍历 (
Bft) - 深度优先遍历 (前序) (
DftPre) - 深度优先遍历 (后序) (
DftPost) - 反向 深度优先遍历 (前序) (
DftPreRev) - 反向 深度优先遍历 (后序) (
DftPostRev)
- 所有路径 (
DftPaths) - 最长路径 (
DftLongestPaths) - 所有循环(路径)(
DftCycles)
通用
遍历使用 泛型(或 类型参数)以提高灵活性,并易于实现和融入现有架构。
惰性
惰性或 惰性评估指的是评估被延迟到需要时。
遍历延迟处理 Node 和获取子 Node 直至调用 Iterator::next。当调用 next 时,遍历仅处理此迭代所需的 Node。
来自 Rust 的文档
迭代器(以及迭代器适配器)是惰性的。这意味着仅仅创建一个迭代器并不会做很多事情。直到你调用
next方法之前,实际上并没有发生任何事情。
用法
将以下内容添加到您的Cargo.toml
[dependencies]
traversal = "0.1"
发布版本
发布说明可在仓库中的CHANGELOG.md文件找到。
算法
A
/ \
B C
/ \ / \
D E F G
给定上述树结构,以下列出的是每个单独的迭代器/遍历算法产生的顺序。
| 算法 | 顺序 |
|---|---|
Bft(广度优先遍历) |
A, B, C, D, E, F, G |
DftPre(先序深度优先遍历) |
A, B, D, E, C, F, G |
DftPost(后序深度优先遍历) |
D, E, B, F, G, C, A |
DftPreRev(反向先序深度优先遍历) |
G, F, C, E, D, B, A |
DftPostRev(反向后序深度优先遍历) |
A, C, G, F, B, E, D |
请参阅每个单独算法的代码示例。
所有路径和最长路径
DftPaths和DftLongestPaths是遍历树中所有路径和最长路径的实用工具。
给定与前面示例相同的树,DftPaths和DftLongestPaths将产生以下路径。
- A, B
- A, B, D
- A, B, E
- A, C
- A, C, F
- A, C, G
- A, B, D
- A, B, E
- A, C, F
- A, C, G
请参阅每个单独算法的代码示例。
环
A <---+
/ \ |
B D >-+
| | |
C E >-+
- A -> D (意味着D与A连接)
- A -> D -> E
请参阅每个单独算法的代码示例。