2个不稳定版本
0.2.0 | 2019年10月24日 |
---|---|
0.1.0 | 2019年10月20日 |
7 in #sapling
46KB
628 行
read-tree
一个用于创建和遍历只读树的Rust库。
用法
将以下内容添加到您的 cargo.toml
文件中。
[dependencies]
read-tree = "0.2"
描述
这个crate提供了一个用于创建和查询树的库。树在初始创建后不应该被修改。
内部,树通过一个 Vec<Vertex<T>>
来表示,其中每个顶点携带树中该节点的有效负载及其子节点数量。此外,顶点是按深度优先排序的;这意味着每个顶点后面都跟着它的第一个子顶点。使用顶点的长度,我们可以轻松地跳过整个子树,并可以立即访问其兄弟。
将树切片为一个节点,就像将树的顶点缓冲区切片为一个 &[Vertex<T>]
。我们将这个切片包装在一个 Node<T>
中。
示例
使用 Sapling
创建树。可以通过 push
将节点附加到幼苗。当一个节点被添加到幼苗中时,它也成为后续添加的节点的父节点。要完成节点并重新选择其父节点,请调用 pop
。当添加没有子节点的节点时,请使用 push_leaf
。还有更多方法可以推送其他幼苗、树或甚至节点。有关更多信息,请参阅 Sapling
。
当幼苗完成后,您可以将其 build
成一个 Tree<T>
。生成的树不能再被修改。通过使用树的切片(称为 Node<T>
)来遍历树。要开始,请使用 as_node
在树上获取其根节点,它表示整个树。
节点支持各种迭代器来遍历其内容。
fn main() -> Result<(), Box<dyn std::error::Error>> {
use read_tree::Sapling;
let mut sap = Sapling::new();
sap.push(1);
sap.pop();
let tree = sap.build()?;
let root = tree.as_node();
assert_eq!(root.data(), &1);
Ok(())
}
更新日志
版本 0.2.0
- 重大更改
- 移除了
Node::depth
- 将
Node::len
修改为不再包含节点自身在内的计数 - 将
Descendants
修改为不再包含节点自身 - 将
Node::iter
重命名为Node::descendants
- 移除了
- 新增
- 将
Vertex
设置为公共 - 添加了
PolyTree
- 添加了
Ancestors
迭代器
- 将
- 改进
- 实现了更多错误枚举的特性和方法
- 实现了更多迭代器的特性和重写方法
版本 0.1.0
首次发布。