我正在编写代码来迭代搜索递归数据结构,如下所示:
struct Tree {
payload: i32,
children: Vec<Box<Tree>>
}
假设我想走下树的每个左分支并修改遇到的每个节点。为简单起见,我不会包含任何终止条件。 Rust的借用检查规则不允许使用以下代码:
fn traverse(mut n: &mut Tree) {
loop {
n.payload += 1;
n = n.children[0].as_mut();
}
}
到目前为止,我发现表达此逻辑的唯一方法如下:
fn traverse(n: &mut Tree) {
let mut stack: Vec<&mut Tree> = vec![n];
while let Some(x) = stack.pop() {
x.payload += 1;
stack.push(x.children[0].as_mut())
}
}
这样可行,但不必要的推/弹不是很优雅。
有没有更好的方法在没有安全Rust的情况下表达这种模式 使用递归?