用C语言完成树的遍历 (1)树的广度优先遍历; (2)树的深度优先遍历递归算法; (3)树的后根序遍历递归算法。
时间: 2024-12-16 14:26:48 浏览: 4
图的深度、广度优先遍历(c语言).rar
5星 · 资源好评率100%
在C语言中,我们可以使用数组或链表结构来模拟二叉树节点,并通过指针操作实现各种遍历算法:
**1. 广度优先遍历 (Breadth First Search, BFS)**
这是一种层序遍历的方式,从上到下、从左到右逐层访问节点。可以借助队列数据结构来辅助。
```c
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
void bfs(TreeNode* root) {
if (!root) return;
queue<TreeNode*> q;
q.enqueue(root);
while (!q.is_empty()) {
TreeNode* node = q.dequeue();
printf("%d ", node->val); // 打印当前节点值
if (node->left) q.enqueue(node->left);
if (node->right) q.enqueue(node->right);
}
}
```
**2. 深度优先遍历 (Depth First Search, DFS) - 递归实现**
这里有两个基本的DFS方法:前序遍历(根-左-右),中序遍历(左-根-右),以及后序遍历(左-右-根)。下面以后序遍历为例:
```c
void dfs_postorder(TreeNode* root, void (*visit)(TreeNode*)) {
if (!root) return;
dfs_postorder(root->left, visit);
dfs_postorder(root->right, visit);
visit(root); // 访问根节点
}
```
其中`visit`函数是一个用户自定义的回调,用于处理每个节点。
**3. 后根序遍历 (Postorder Traversal) - 递归实现**
后根序遍历就是先访问左子树,再访问右子树,最后访问根节点。这与上面的`dfs_postorder`几乎一致,只需改变访问顺序:
```c
void postorderTraversal(TreeNode* root) {
dfs_postorder(root, &postorderVisit);
}
void postorderVisit(TreeNode* node) {
printf("%d ", node->val);
}
```
阅读全文