c++实现深度优先遍历
时间: 2023-10-20 08:06:02 浏览: 102
C/C++实现图的深度优先遍历和广度优先遍历
要实现深度优先遍历(Depth-First-Search,DFS),你可以使用递归或者栈来实现。下面是使用递归的示例代码:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
void init(Stack* stack) {
stack->top = -1;
}
void push(Stack* stack, int value) {
stack->top++;
stack->data[stack->top] = value;
}
int pop(Stack* stack) {
return stack->data[stack->top--];
}
int is_empty(Stack* stack) {
return stack->top == -1;
}
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
Node* create_node(int value) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = value;
node->left = NULL;
node->right = NULL;
return node;
}
void dfs(Node* root) {
if (root == NULL) {
return;
}
printf("%d ", root->data);
dfs(root->left);
dfs(root->right);
}
```
你可以根据需要构建一个二叉树,并调用 `dfs` 函数进行深度优先遍历。在遍历过程中,先输出当前节点的值,然后递归遍历左子树和右子树。这样就能实现深度优先遍历了。
如果你想使用非递归的方式实现深度优先遍历,可以使用栈来辅助实现。每次将当前节点的右子树压入栈,然后处理左子树,直到栈为空为止。这样可以保证栈顶元素始终是要处理的节点。
阅读全文