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
请参阅每个单独算法的代码示例。