问题描述
当我在函数中运行以下行时,Rust 会发生恐慌。 X 是 &Tree,Tree 是 Rc
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,}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)