![](/img/trans.png)
[英]How can I make tree-like structure where the nodes are trait objects in Rust?
[英]Mutable reference to parent in tree-like structure
我正在开发一个 Rust 程序,该程序对树结构执行操作,我们称它们为Node
。 不需要存储每个节点的子节点列表,但需要能够从任何其他节点返回到父节点。 假设结构不可变, struct Node
可能如下所示:
struct Node<'a> {
parent: Option<&'a Node<'a>>,
// ... node attributes ...
}
问题是我需要改变树。 我有一个 function 接收叶节点并对树执行更改(仅更改节点属性,从不更改树结构)。 不仅要改变叶节点的属性,还要改变父节点的属性。
它可能看起来像这样:
fn mutate_tree(leaf: &mut Node) {
leaf.attr1 = 42;
leaf.parent.unwrap().attr1 = 43;
}
我如何设计struct Node
以允许这些修改(并获得对父节点的可变引用)?
我总是从树的最深处向上遍历,而不是从相反的方向。
Node
在函数中被实例化,这些函数也会销毁它们。 我正在尝试找到不需要对它们进行堆分配的解决方案,但如果这不容易实现,我可以忍受使用Rc
分配所有节点。
由于多个孩子引用了同一个父母,因此您需要RefCell
:
struct Node<'a> {
parent: Option<&'a RefCell<Node<'a>>>,
// ... node attributes ...
}
fn mutate_tree(leaf: &mut Node) {
leaf.attr1 = 42;
leaf.parent.unwrap().borrow_mut().attr1 = 43;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.