2个不稳定版本

0.2.0 2019年10月24日
0.1.0 2019年10月20日

7 in #sapling

MIT 协议

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

首次发布。

无运行时依赖