当我在函数中运行以下行时,Rust 会发生恐慌。X 是 &Tree,树是 Rc<RefCell<TreeNode<>>>。TreeNode 是一个结构。
x.borrow_mut().parent.as_ref().unwrap().borrow_mut().left = Option::from(y.as_ref().unwrap().clone());
我尝试将 borrow_mut() 更改为 borrow() 并将第二个保留为 borrow_mut() 但相同的错误消息。
错误信息:
thread 'main' panicked at 'already borrowed: BorrowMutError'
整体功能:
fn left_rotate(x: &Tree){
let mut y = x.borrow().right.clone();
x.borrow_mut().right = y.as_ref().unwrap().borrow().left.clone();
if y.as_ref().unwrap().borrow().left.is_some(){
y.as_ref().unwrap().borrow_mut().left.as_ref().unwrap().borrow_mut().parent = Some(x.clone());
}
y.as_ref().unwrap().borrow_mut().parent = x.borrow().parent.clone();
if x.borrow().parent.is_none(){
//*self = Option::from(y.clone());
}else{
if x.borrow().key == x.borrow().parent.as_ref().unwrap().borrow().left.as_ref().unwrap().borrow().key{
x.borrow_mut().parent.as_ref().unwrap().borrow_mut().left = Option::from(y.as_ref().unwrap().clone());
}else{
x.borrow_mut().parent.as_ref().unwrap().borrow_mut().right = Option::from(y.as_ref().unwrap().clone());
}
}
y.as_ref().unwrap().borrow_mut().left = Option::from(x.clone());
x.borrow_mut().parent = Option::from(y.as_ref().unwrap().clone());
}
#[derive(Clone, Debug, PartialEq)]
enum NodeColor {
Red,
Black,
}
type Tree = Rc<RefCell<TreeNode<u32>>>;
type RedBlackTree= Option<Tree>;
struct TreeNode<T> {
pub color: NodeColor,
pub key: T,
pub parent: RedBlackTree,
left: RedBlackTree,
right: RedBlackTree,
}