用C语言定义一个二叉树 并且包括它的前序遍历 中序遍历 后序遍历的算法
时间: 2024-11-25 13:12:33 浏览: 34
在C语言中,我们可以首先定义一个二叉树的数据结构,然后分别编写前序遍历、中序遍历和后序遍历的递归算法。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct TreeNode {
int data; // 节点数据
struct TreeNode* left; // 左子树指针
struct TreeNode* right; // 右子树指针
} Node;
// 前序遍历(根-左-右)
void preOrder(Node* root) {
if (root != NULL) {
printf("%d ", root->data); // 先访问根节点
preOrder(root->left); // 再遍历左子树
preOrder(root->right); // 最后遍历右子树
}
}
// 中序遍历(左-根-右)
void inOrder(Node* root) {
if (root != NULL) {
inOrder(root->left); // 遍历左子树
printf("%d ", root->data); // 接着访问根节点
inOrder(root->right); // 最后遍历右子树
}
}
// 后序遍历(左-右-根)
void postOrder(Node* root) {
if (root != NULL) {
postOrder(root->left); // 遍历左子树
postOrder(root->right); // 遍历右子树
printf("%d ", root->data); // 最后访问根节点
}
}
// 测试函数,用于创建和初始化二叉树
void createTree(Node** root, int arr[], int n) {
for (int i = 0; i < n; ++i) {
if (arr[i] == -1) {
*root = NULL;
break;
}
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = arr[i];
newNode->left = newNode->right = NULL;
if (*root == NULL) {
*root = newNode;
} else {
Node* temp = *root;
while (temp != NULL) {
if (arr[i] < temp->data) {
if (temp->left == NULL) {
temp->left = newNode;
break;
} else {
temp = temp->left;
}
} else {
if (temp->right == NULL) {
temp->right = newNode;
break;
} else {
temp = temp->right;
}
}
}
}
}
}
int main() {
int arr[] = {8, 3, 10, 1, 6, 14, 4, 7, 13};
int n = sizeof(arr) / sizeof(arr[0]);
Node* root = NULL;
createTree(&root, arr, n);
printf("Preorder traversal: ");
preOrder(root);
printf("\nInorder traversal: ");
inOrder(root);
printf("\nPostorder traversal: ");
postOrder(root);
return 0;
}
```
这个示例中,我们先创建了一个二叉搜索树,并通过`createTree`函数根据给定的数组构建树。然后,我们展示了三种遍历方法的实现。
阅读全文