请帮我写一段rust语言深度优先遍历代码
时间: 2023-05-25 10:02:15 浏览: 209
好的,以下是一个简单的 Rust 语言实现深度优先遍历的代码:
```
use std::collections::HashSet;
// 定义一个节点结构体,用于构建树
struct Node {
id: u32,
children: Vec<Node>,
}
// 深度优先遍历函数
fn dfs(node: &Node, visited: &mut HashSet<u32>) {
visited.insert(node.id);
println!("访问节点: {}", node.id);
for child in &node.children {
if !visited.contains(&child.id) {
dfs(child, visited);
}
}
}
fn main() {
// 构造一个简单的树
let node1 = Node {
id: 1,
children: vec![
Node {
id: 2,
children: vec![Node { id: 4, children: vec![] }],
},
Node {
id: 3,
children: vec![Node { id: 5, children: vec![] }],
},
],
};
// 记录已经访问过的节点
let mut visited = HashSet::new();
// 深度优先遍历
dfs(&node1, &mut visited);
}
```
简单说明一下,上述代码中首先我们定义了一个 Node 结构体,它包含了一个 id 属性和一个 children 属性,children 属性是一个节点数组,用于构建树形结构。然后我们通过 dfs 函数进行深度优先遍历,它接收一个节点和一个已访问节点的 HashSet,首先将当前节点加入已访问节点集合中,并输出当前访问节点的 id,接着遍历当前节点的 children 数组,若某个孩子节点没有被访问过,则递归调用 dfs 函数。最后在 main 函数里构造了一个简单的树,并进行深度优先遍历,输出访问节点的 id。
阅读全文