Как реализовать итератор изменяемых ссылок на значения в правой части дерева двоичного поиска?

Я реализовал простое двоичное дерево поиска в Rust (после CIS 198, это здорово), и для обучения я делаю итераторы, которые просто бегут по правым краям.

Я не мог реализовать итератор, который дает изменяемые ссылки. Я перепробовал много способов, но ни один из них не был принят компилятором Rust. Код, мне нужна помощь, приведен ниже (пока я сделал суть с полным кодом здесь):

#[derive(Debug)]
pub struct Tree<T>(Option<Box<Node<T>>>);

#[derive(Debug)]
pub struct Node<T> {
    elem: T,
    left: Tree<T>,
    right: Tree<T>,
}

// MUTABLE BORROW STRUCT
pub struct IterMut<'a, T: 'a> {
    next: &'a mut Tree<T>,
}

// MUTABLE BORROW NEXT (I'M STUCK HERE, NOTHING WORKS)
impl<'a, T> Iterator for IterMut<'a, T> {
    type Item = &'a mut T;
    fn next(&mut self) -> Option<Self::Item> {
        // 1 try: cannot infer lifetime
        self.next.0.as_mut().map(|node| {
            self.next = &mut node.right;
            &mut node.elem
        })

        // 2 try: node.right, node.elem does not live long enough
        self.next.0.take().map(|node| {
            self.next = &mut node.right;
            &mut node.elem
        })
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос