内容:掌握建立二叉树的方法,实现先序、中序、后序三种遍历的递归算法和非递归算法。 题目:二叉树的遍历 使用c语言
时间: 2024-12-06 08:27:26 浏览: 20
在C语言中,我们可以利用递归或迭代的方式实现二叉树的先序、中序和后序遍历。这里我会简单地给出递归版的代码示例,并简述遍历的概念。
**先序遍历(根-左-右)**:
```c
void preorder(struct TreeNode* root) {
if (root != NULL) {
printf("%d ", root->val); // 先访问根节点
preorder(root->left); // 然后递归遍历左子树
preorder(root->right); // 最后遍历右子树
}
}
```
**中序遍历(左-根-右)**:
```c
void inorder(struct TreeNode* root) {
if (root != NULL) {
inorder(root->left); // 首先遍历左子树
printf("%d ", root->val); // 接着访问根节点
inorder(root->right); // 最后遍历右子树
}
}
```
**后序遍历(左-右-根)**:
```c
void postorder(struct TreeNode* root) {
if (root != NULL) {
postorder(root->left); // 先递归左子树
postorder(root->right); // 然后右子树
printf("%d ", root->val); // 最后访问根节点
}
}
```
非递归版本通常通过栈来辅助,但在这里由于篇幅原因不详细展示。对于所有这三种遍历,关键在于如何维护遍历的顺序——先访问哪个节点,然后访问哪个,最后访问哪个。
**相关问题--:**
1. 递归遍历和非递归遍历在效率上有何区别?
2. 如何理解“前序遍历”中的“根-左-右”?
3. 中序遍历常用于什么场景?
阅读全文