Wie implementiere ich einen Iterator für veränderbare Verweise auf die Werte am rechten Rand eines binären Suchbaums?

Ich habe einen einfachen binären Suchbaum in Rust implementiert (nach CIS 198 ist das großartig), und um zu lernen, mache ich Iteratoren, die nur durch die rechten Ränder laufen.

Ich konnte keinen Iterator implementieren, der veränderbare Referenzen enthält. Ich habe viele Möglichkeiten ausprobiert, aber keine wurde vom Rust-Compiler akzeptiert. Der Code, den ich brauche, ist der folgende in der Zwischenzeit habe ich hier einen Überblick über den vollständigen Code gegeben):

#[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
        })
    }
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage