c语言以二叉链表表示二叉树,建立一棵二叉树并输出先序遍历结果、中序遍历结果、后序遍历结果的完整代码
时间: 2024-12-17 15:32:43 浏览: 60
在C语言中,我们通常使用结构体表示二叉树节点,并通过指针链接形成二叉链表。下面是一个简单的示例,包括二叉树的创建以及先序(Preorder)、中序(Inorder)和后序(Postorder)遍历的函数:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建一个新的二叉树节点
TreeNode* createNode(int val) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = val;
newNode->left = newNode->right = NULL;
return newNode;
}
// 插入节点到二叉搜索树
void insert(TreeNode** root, int val) {
if (*root == NULL) {
*root = createNode(val);
} else if (val < (*root)->val) {
insert(&(*root)->left, val);
} else {
insert(&(*root)->right, val);
}
}
// 先序遍历
void preorderTraversal(TreeNode* root, void (*visit)(int)) {
if (root != NULL) {
visit(root->val);
preorderTraversal(root->left, visit);
preorderTraversal(root->right, visit);
}
}
// 中序遍历
void inorderTraversal(TreeNode* root, void (*visit)(int)) {
if (root != NULL) {
inorderTraversal(root->left, visit);
visit(root->val);
inorderTraversal(root->right, visit);
}
}
// 后序遍历
void postorderTraversal(TreeNode* root, void (*visit)(int)) {
if (root != NULL) {
postorderTraversal(root->left, visit);
postorderTraversal(root->right, visit);
visit(root->val);
}
}
// 输出遍历结果的辅助函数
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
// 示例:构建二叉搜索树,这里假设输入值已排序
int values[] = {5, 3, 7, 2, 4, 6, 8};
int n = sizeof(values) / sizeof(values[0]);
TreeNode* root = NULL;
for (int i = 0; i < n; i++) {
insert(&root, values[i]);
}
// 遍历并输出结果
printf("先序遍历:\n");
int preorderResult[100];
preorderTraversal(root, &preorderResult[0]);
printArray(preorderResult, n);
printf("中序遍历:\n");
int inorderResult[100];
inorderTraversal(root, &inorderResult[0]);
printArray(inorderResult, n);
printf("后序遍历:\n");
int postorderResult[100];
postorderTraversal(root, &postorderResult[0]);
printArray(postorderResult, n);
return 0;
}
```
在这个例子中,你需要提供一个已经排序好的整数数组`values`作为输入,程序会构建一个二叉搜索树并按照先序、中序和后序的方式打印节点值。
阅读全文
相关推荐


















