数据结构的先序遍历中序遍历后序遍历图
时间: 2025-01-01 09:30:27 浏览: 13
### 数据结构中的二叉树遍历方式
#### 三种主要的遍历方式及其定义
对于二叉树而言,存在三种基本的遍历方式:先序遍历、中序遍历以及后序遍历。每种遍历方式都遵循特定访问节点的顺序。
- **先序遍历**指的是首先处理根节点,接着依次处理左子树和右子树[^2]。
- **中序遍历**则是先处理左子树,之后才是根节点,最后才轮到右子树[^3]。
- **后序遍历**意味着要等到左右两个子树都被处理完毕才会去处理根节点[^3]。
这些描述可以被形象化成图表形式以便更直观理解:
| 遍历类型 | 访问次序 |
| --- | --- |
| ![Pre-order](https://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Binary_tree_preorder.svg/190px-Binary_tree_preorder.svg.png) | 根 -> 左 -> 右 |
| ![In-order](https://upload.wikimedia.org/wikipedia/commons/thumb/e/ec/Binary_tree_inorder.svg/190px-Binary_tree_inorder.svg.png) | 左 -> 根 -> 右 |
| ![Post-order](https://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Binary_tree_postorder.svg/190px-Binary_tree_postorder.svg.png) | 左 -> 右 -> 根 |
上述表格展示了不同类型的遍历模式下各个节点之间的相对位置关系。通过观察图片可以看出,在不同的遍历策略之下,同一棵二叉树上的各元素将会呈现出不一样的线性排列形态[^1]。
```cpp
// C++ 实现示例代码展示如何执行这三种遍历操作
void preOrder(Node* node){
if(node != NULL){
printf("%d ",node->key);
preOrder(node->left);
preOrder(node->right);
}
}
void inOrder(Node* node){
if(node != NULL){
inOrder(node->left);
printf("%d ",node->key);
inOrder(node->right);
}
}
void postOrder(Node* node){
if(node != NULL){
postOrder(node->left);
postOrder(node->right);
printf("%d ",node->key);
}
}
```
阅读全文