数据结构前序中序后序层次遍历树c语言
时间: 2023-12-06 11:01:03 浏览: 82
树是一种常用的数据结构,具有分层的特点。在树的结构中,常常需要对树进行遍历操作,包括前序遍历、中序遍历、后序遍历和层次遍历。
前序遍历(Preorder Traversal)是指先遍历根节点,再遍历左子树,最后遍历右子树。可以通过递归或者栈的方式实现前序遍历。
中序遍历(Inorder Traversal)是指先遍历左子树,再遍历根节点,最后遍历右子树。同样可以通过递归或者栈的方式实现中序遍历。
后序遍历(Postorder Traversal)是指先遍历左子树,再遍历右子树,最后遍历根节点。同样可以通过递归或者栈的方式实现后序遍历。
层次遍历(Level Order Traversal)是指从上到下逐层遍历树的节点。可以利用队列的方式实现层次遍历,先将根节点入队,然后依次将每个节点的左右子节点入队,直到队列为空。
在C语言中,可以利用结构体和指针表示树的节点,通过递归或者迭代的方式实现树的遍历操作。可以使用数组、链表或者队列等数据结构来辅助实现。
以下是一段C语言代码示例,演示了如何实现树的前序、中序、后序和层次遍历操作:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 前序遍历
void preorderTraversal(TreeNode* root) {
if (root == NULL) return;
printf("%d ", root->data);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
// 中序遍历
void inorderTraversal(TreeNode* root) {
if (root == NULL) return;
inorderTraversal(root->left);
printf("%d ", root->data);
inorderTraversal(root->right);
}
// 后序遍历
void postorderTraversal(TreeNode* root) {
if (root == NULL) return;
postorderTraversal(root->left);
postorderTraversal(root->right);
printf("%d ", root->data);
}
// 层次遍历
void levelOrderTraversal(TreeNode* root) {
if (root == NULL) return;
TreeNode* queue[100]; // 使用数组模拟队列
int front = 0;
int rear = 0;
queue[rear++] = root;
while (front < rear) {
TreeNode* node = queue[front++];
printf("%d ", node->data);
if (node->left != NULL) {
queue[rear++] = node->left;
}
if (node->right != NULL) {
queue[rear++] = node->right;
}
}
}
int main() {
// 创建一棵树
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = 1;
root->left = (TreeNode*)malloc(sizeof(TreeNode));
root->right = (TreeNode*)malloc(sizeof(TreeNode));
root->left->data = 2;
root->right->data = 3;
root->left->left = NULL;
root->left->right = NULL;
root->right->left = NULL;
root->right->right = NULL;
printf("前序遍历结果:");
preorderTraversal(root);
printf("\n中序遍历结果:");
inorderTraversal(root);
printf("\n后序遍历结果:");
postorderTraversal(root);
printf("\n层次遍历结果:");
levelOrderTraversal(root);
return 0;
}
```
以上代码中,先定义了树的结构体`TreeNode`,包含数据、左子树指针和右子树指针。然后定义了四个遍历函数,根据不同的遍历方式实现相应的遍历过程。在`main`函数中,创建了一棵树,并调用四个遍历函数分别进行遍历操作。
阅读全文