Crates.io | tree-struct |
lib.rs | tree-struct |
version | 0.1.1 |
source | src |
created_at | 2023-10-04 03:08:14.678481 |
updated_at | 2023-10-04 03:20:18.449637 |
description | A general-purpose Tree implementation in Rust |
homepage | |
repository | https://github.com/Megadash452/tree-struct |
max_upload_size | |
id | 991785 |
size | 31,763 |
A general-purpose Tree implementation in Rust.
A Tree is essentially an owned
Node with content, children, and no parent.
Most of the time, you will be dealing with mutably and immutably borrowed
Nodes.
Create a Tree with NodeBuilder
.
Nodes can be mutably borrowed with from their tree with Tree::borrow_descendant
,
then you can change the content of the Node, or append children.
Nodes can also be detached from the Tree with Tree::detach_descendant
, but that does not require a mutable reference to the Node.
You can iterate over all the Nodes of a Tree or a subtree (borrowed Node) using Breadth-first or Depth-first Search algorithms. The iterators can be used to find a Node that you want to detach or append to another Node.
Mutable iterators (Iterator<Item = &mut Node>
) are unsafe due to the fact that they yield mutable references to every Node.
A child of the yielded Nodes can then be immutably borrowed
with node.children()
, but the same child will be yielded in a future iteration.
Now mutable and shared
references to the same Node exist simultaneusly, which is unsafe.
A better (and safe) alternative to mutable iterators is using the immutable iterators (IterBFS
and IterDFS
) and mutably borrowing a descendant from the Tree.