我想通过生锈来实现Treep
。 Treep
的节点结构是
#[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
。有没有更好的方法来优化代码?
答案 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
}
}
}