如何用c语言实现二叉树的递归遍历,包括先序、中序和后序三种遍历方式?举例一个完整代码
时间: 2024-10-25 17:15:28 浏览: 96
在C语言中,我们可以使用递归来实现二叉树的遍历。以下是先序遍历(根节点 -> 左子树 -> 右子树)、中序遍历(左子树 -> 根节点 -> 右子树)和后序遍历(左子树 -> 右子树 -> 根节点)的示例代码:
```c
#include <stdio.h>
// 定义二叉树结点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 先序遍历(根节点 -> 左子树 -> 右子树)
void preorderTraversal(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->val); // 访问根节点
preorderTraversal(root->left); // 递归遍历左子树
preorderTraversal(root->right); // 递归遍历右子树
}
}
// 中序遍历(左子树 -> 根节点 -> 右子树)
void inorderTraversal(TreeNode* root) {
if (root != NULL) {
inorderTraversal(root->left); // 递归遍历左子树
printf("%d ", root->val); // 访问根节点
inorderTraversal(root->right); // 递归遍历右子树
}
}
// 后序遍历(左子树 -> 右子树 -> 根节点)
void postorderTraversal(TreeNode* root) {
if (root != NULL) {
postorderTraversal(root->left); // 递归遍历左子树
postorderTraversal(root->right); // 递归遍历右子树
printf("%d ", root->val); // 访问根节点
}
}
// 创建一个简单的二叉树作为示例
TreeNode* createBinaryTree() {
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->left->val = 2;
root->left->left = NULL;
root->left->right = NULL;
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->right->val = 3;
root->right->left = (TreeNode*)malloc(sizeof(TreeNode));
root->right->left->val = 4;
root->right->left->left = NULL;
root->right->left->right = NULL;
root->right->right = NULL;
return root;
}
int main() {
TreeNode* tree = createBinaryTree();
// 遍历示例
printf("Preorder traversal: ");
preorderTraversal(tree);
printf("\nInorder traversal: ");
inorderTraversal(tree);
printf("\nPostorder traversal: ");
postorderTraversal(tree);
free(tree); // 清理内存
return 0;
}
```
在这个例子中,我们首先定义了一个二叉树节点结构,并分别实现了三种遍历方法。在`main`函数中,我们创建了一个简单的二叉树并进行了遍历。
阅读全文