1个不稳定版本

0.1.1 2023年10月4日
0.1.0 2023年10月4日

1360 in 算法

MIT 许可证

24KB
345

树结构

Rust中一个通用的树实现。

树和节点

树本质上是一个具有 内容子节点 且没有 父节点owned 节点。大多数情况下,你将处理 mutably and immutably borrowed 节点。使用 NodeBuilder 创建树。

节点可以通过 Tree::borrow_descendant 从其树中 mutably borrowed,然后你可以更改节点的 内容追加子节点。节点也可以通过 Tree::detach_descendant 从树中 detached,但这不需要节点的 mutable reference

迭代器

您可以使用 Breadth-firstDepth-first Search 算法遍历树或子树(借用的节点)。迭代器可以用来 查找 您想要 detachappend 到另一个节点的节点。

可变节点的迭代器

由于迭代器产生每个节点的可变引用,因此可变迭代器(Iterator<Item = &mut Node>)是不安全的。然后可以使用 node.children()immutably borrowed 的方式借用产生节点的子节点,但相同的子节点将在未来的迭代中再次产生。现在存在对同一节点的 mutable and shared 引用,这是 unsafe 的。

可变迭代器的更好(且 safe)替代方案是使用不可变迭代器(IterBFSIterDFS)并从树中 mutably borrowing 子节点。

依赖

~21KB