1个不稳定版本
0.1.1 | 2023年10月4日 |
---|---|
0.1.0 |
|
1360 in 算法
24KB
345 行
树结构
Rust中一个通用的树实现。
树和节点
树本质上是一个具有 内容、子节点 且没有 父节点 的 owned
节点。大多数情况下,你将处理 mutably and immutably borrowed
节点。使用 NodeBuilder
创建树。
节点可以通过 Tree::borrow_descendant
从其树中 mutably borrowed,然后你可以更改节点的 内容 或 追加子节点。节点也可以通过 Tree::detach_descendant
从树中 detached,但这不需要节点的 mutable reference。
迭代器
您可以使用 Breadth-first 或 Depth-first Search 算法遍历树或子树(借用的节点)。迭代器可以用来 查找 您想要 detach 或 append 到另一个节点的节点。
可变节点的迭代器
由于迭代器产生每个节点的可变引用,因此可变迭代器(Iterator<Item = &mut Node>
)是不安全的。然后可以使用 node.children()
以 immutably borrowed
的方式借用产生节点的子节点,但相同的子节点将在未来的迭代中再次产生。现在存在对同一节点的 mutable and shared
引用,这是 unsafe 的。
可变迭代器的更好(且 safe)替代方案是使用不可变迭代器(IterBFS
和 IterDFS
)并从树中 mutably borrowing 子节点。
依赖
~21KB