gpt4 book ai didi

rust - 使用枚举和匹配的迭代二叉搜索树

转载 作者:行者123 更新时间:2023-12-03 11:49:17 28 4
gpt4 key购买 nike

我是一个初学者,所以请多多包涵。

给定BST的以下枚举定义。

enum Tree {
Node(i64, Box<Tree>, Box<Tree>),
Nil,
}

我想实现 Tree::insert。到目前为止,这就是我所拥有的。 (准备意大利面)。
impl Tree {
fn new() -> Tree {
Nil
}

fn insert(self: &mut Tree, new_val: i64) -> Tree {
let mut temp = self;
loop {
match *temp {
Node(val, ref mut left, ref mut right) => /* go left is smaller, else go right*/,
Nil => { break; },
}
}
/* create new node and have the left or right pointer of the leaf point to it */
return *self;
}

我了解如何用功能样式实现此功能,在该构造函数中,我构造了一个新树,每个调用的左子树和右子树都是在适当子树上进行递归调用的结果。我还认为我可以使用结构更轻松地实现此目标。但是我想使用这种风格的混合。

令我困惑的是...

从概念上讲,我希望有一个对根的引用,然后继续将此引用更改为左或右子树,就像我用C++编写的那样。但是由于借用了语义,我似乎无法通过复制引用来导航到左右子树。此外,使用rust 似乎并不能像C/C++一样使我能够访问指针,而且我通常感到困惑。

关于在不完全放弃并改用功能风格或构造结构的情况下使这段代码起作用的任何提示?提前致谢。

最佳答案

也许遵循以下内容?

fn insert(self: &mut Tree, new_val: i64) {
let mut temp : &mut Tree = self;
loop {
temp = match temp {
Tree::Node(val, ref mut left, ref mut right) => {
if new_val<*val {
left.as_mut()
} else {
right.as_mut()
}
},
Tree::Nil => { break; },
}
}
*temp = Tree::Node(new_val, Box::new(Tree::Nil), Box::new(Tree::Nil))
}

关于rust - 使用枚举和匹配的迭代二叉搜索树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61002002/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com