请给我深度优先遍历非递归方法代码示例
时间: 2023-03-30 14:01:57 浏览: 101
以下是深度优先遍历非递归方法的代码示例:
void DFS_non_recursive(Node* root) {
if (root == NULL) {
return;
}
stack<Node*> s;
s.push(root);
while (!s.empty()) {
Node* cur = s.top();
s.pop();
cout << cur->val << " ";
if (cur->right != NULL) {
s.push(cur->right);
}
if (cur->left != NULL) {
s.push(cur->left);
}
}
}
相关问题
请给我无向图的深度优先遍历非递归方法代码示例
当然可以,以下是无向图的深度优先遍历非递归方法代码示例:
```
void DFS(vector<vector<int>>& graph, vector<bool>& visited, int start) {
stack<int> s;
s.push(start);
visited[start] = true;
while (!s.empty()) {
int curr = s.top();
s.pop();
for (int i = ; i < graph[curr].size(); i++) {
int next = graph[curr][i];
if (!visited[next]) {
visited[next] = true;
s.push(next);
}
}
}
}
void DFS_non_recursive(vector<vector<int>>& graph) {
int n = graph.size();
vector<bool> visited(n, false);
for (int i = ; i < n; i++) {
if (!visited[i]) {
DFS(graph, visited, i);
}
}
}
```
希望能够帮到你!
图的深度优先遍历非递归
图的深度优先遍历可以使用栈来实现非递归算法。
具体实现步骤如下:
1. 创建一个栈,并将起始节点入栈。
2. 创建一个 visited 集合,记录已经访问过的节点。
3. 当栈不为空时,取出栈顶节点,如果该节点没有被访问过,则将其标记为已访问,并将其所有未访问过的邻居节点入栈。
4. 重复步骤3,直到栈为空。
以下是示例 Python 代码实现:
```python
def dfs_iterative(graph, start):
stack = [start]
visited = set()
while stack:
node = stack.pop()
if node not in visited:
visited.add(node)
for neighbor in graph[node]:
if neighbor not in visited:
stack.append(neighbor)
return visited
```
其中,graph 表示图的邻接表表示方式,start 表示起始节点。函数返回已经访问过的节点集合。
阅读全文