递归结构的最佳实现是什么?

时间:2016-01-12 05:28:08

标签: rust

我想通过生锈来实现TreepTreep的节点结构是

#[derive(Clone)]
struct TreepNode {
    data: i32,
    left: Option<Box<TreepNode>>,
    right: Option<Box<TreepNode>>,
}

然后我定义了一个函数来实现正确的旋转操作。

fn rightRotate(&self) -> Box<TreepNode> {
    match self.clone().left {
        None => return Box::new(self.clone()),
        Some(ref mut leftTree) => {
            let mut selfTree = self.clone();
            selfTree.left = leftTree.right.clone();
            leftTree.right = Some(Box::new(selfTree));
            return leftTree.clone()
        }
    }
}

此代码可以编译。但是,代码很难看,因为其中有很多clone()Some。有没有更好的方法来优化代码?

1 个答案:

答案 0 :(得分:2)

如果您使用clone()

,则可以避免Self
fn right_rotate(mut self) -> Box<TreepNode> {
    match self.left.take() {
        None => Box::new(self),
        Some(mut left) => {
            self.left = left.right.take();
            left.right = Some(Box::new(self)); 
            left
        }
    }
}