尝试使用以下结构在Rust中创建一棵树:
构建新节点时,使用以下功能:
pub struct Node{
pub children: Vec<Box<Node>>,
pub parent: Option<Box<Node>>,
pub value: f32,
//.....
}
构建新节点时,使用以下功能:
pub fn build_node(parent: Option<Box<Node>>)-> Node{
Node{
children: vec![],
parent,
value: 0.0,
}
}
当尝试添加节点时,例如:
let mut root_nd = tree::build_node(None, 5, state);
let mut next_nd = tree::build_node(Some(Box::new(root_nd)), 2);
root_nd.children.push(Box::new(next_nd));
由于我借用了root_nd
,然后尝试将next_nd
添加到root.children
列表中,因此会出现错误。即使没有这个错误,我仍然需要在将其添加到root_nd
的子项之后引用next_nd
。我知道在 Rust 中不可能同时拥有同一元素的多个可变引用。那么问题是如何在 Rust 中制作具有双向引用的类似树状数据结构?在我的脑海中,这是一个冲突,因为 Rust 不希望有多个引用,但是我需要树中间的一个节点被他的父节点和子节点都引用。
borrow_mut()
来提取和访问其元素? - Miguellet node: Option<Rc<RefCell<TreeNode>>>
。当你将引用传递给函数时,你可能需要克隆它,以便当前的引用不会被移动。即somefun(node.clone())
。要访问其元素,请使用borrow
(不可变)或borrow_mut
(可变)。 - PsidomOption
,因为父级可能为None
,而且None
本身就是Option
类型,所以如果一个值可以是None
,那么它的类型必须是Option
。 - Psidom