前言:
题目:给定一颗以1为根的树(分别给出每个点的左右儿子),求出先序遍历、中序遍历、后序遍历和层序遍历。

思路:二叉树
代码实现:
cpp
//先序遍历
void dfs1(int x) {
cout << x << " ";
if (l[x]) dfs1(l[x]);
if (r[x]) dfs1(r[x]);
}
//中序遍历
void dfs2(int x) {
if (l[x]) dfs2(l[x]);
cout << x << " ";
if (r[x]) dfs2(r[x]);
}
//后续遍历
void dfs3(int x) {
if (l[x]) dfs3(l[x]);
if (r[x]) dfs3(r[x]);
cout << x << " ";
}
//层序遍历
void bfs() {
queue<int> q;
q.push(1);
while (q.size()) {
int x = q.front(); q.pop();
cout << x << " ";
if (l[x]) q.push(l[x]);
if (r[x]) q.push(r[x]);
}
}
拓展:
1. 先序遍历(Preorder Traversal)
顺序 :根节点 → 左子树 → 右子树
特点:优先访问根节点,适合需要先处理父节点再处理子节点的场景(如复制树的结构)。
2. 中序遍历(Inorder Traversal)
顺序 :左子树 → 根节点 → 右子树
特点:对二叉搜索树(BST)中序遍历时,结果是有序序列。
3. 后序遍历(Postorder Traversal)
顺序 :左子树 → 右子树 → 根节点
特点:优先处理子节点再处理根节点,适合需要释放树的内存或计算表达式树。
4. 层序遍历(Level Order Traversal)
顺序 :按树的层级从上到下、从左到右逐层访问节点。
实现方式:通常使用队列(Queue)实现,属于广度优先搜索(BFS)。
总结对比
遍历方式 | 顺序 | 常见应用场景 |
---|---|---|
先序 | 根 → 左 → 右 | 复制树结构、前缀表达式 |
中序 | 左 → 根 → 右 | 二叉搜索树的有序输出 |
后序 | 左 → 右 → 根 | 删除树、后缀表达式 |
层序 | 按层级逐层访问 | 计算树的高度、BFS算法 |