0

当我在函数中运行以下行时,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,
}

可重现的代码

4

0 回答 0