Попытка создать дерево в ржавчине со следующей структурой:
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
, и даже если не было этой ошибки, япо-прежнему нужно иметь ссылку для next_nd
после добавления ее к потомкам root_nd
. Я знаю, что в ржавчине невозможно иметь несколько изменяемых ссылок одновременно для одного и того же элемента. Таким образом, вопрос заключается в том, как можно создать древовидную структуру данных с двунаправленными ссылками в ржавчине? В моей голове это конфликт, так как rust не хочет множественных ссылок, но мне нужен узел в середине дерева, на который будут ссылаться как его родительский узел, так и его дочерние узлы.