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