从键盘输入n个数据建立n元完全二叉树顺序存储结构。实现该完全二叉树的先、中、后序遍历。用C语言
时间: 2024-12-06 12:27:36 浏览: 9
在C语言中,我们可以首先创建一个结构体来表示二叉树节点,然后实现函数用于构建完全二叉树、以及先序、中序和后序遍历。以下是关键部分的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建新节点并插入数据
TreeNode* createNode(int data) {
TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
newNode->val = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
// 构建完全二叉树
void buildCompleteBT(int n, TreeNode** root, int* arr) {
if (n <= 0)
return;
// 先序遍历构造
*root = createNode(arr[0]);
int i = 1;
while (i < n && (*root)->left == NULL) {
(*root)->left = createNode(arr[i++]);
if (i < n && (*root)->right == NULL) {
(*root)->right = createNode(arr[i++]);
} else {
break;
}
}
}
// 先序、中序、后序遍历
void inorderTraversal(TreeNode* node) {
if (node != NULL) {
inorderTraversal(node->left);
printf("%d ", node->val); // 中序
inorderTraversal(node->right);
}
}
void preorderTraversal(TreeNode* node) {
if (node != NULL) {
printf("%d ", node->val); // 先序
preorderTraversal(node->left);
preorderTraversal(node->right);
}
}
void postorderTraversal(TreeNode* node) {
if (node != NULL) {
preorderTraversal(node->left);
preorderTraversal(node->right);
printf("%d ", node->val); // 后序
}
}
int main() {
int n, i;
printf("Enter the number of elements: ");
scanf("%d", &n);
int* arr = (int*)malloc(n * sizeof(int)); // 输入数组
for (i = 0; i < n; ++i) {
scanf("%d", &arr[i]);
}
TreeNode* root = NULL;
buildCompleteBT(n, &root, arr);
printf("In-order traversal: ");
inorderTraversal(root);
printf("\n");
printf("Pre-order traversal: ");
preorderTraversal(root);
printf("\n");
printf("Post-order traversal: ");
postorderTraversal(root);
printf("\n");
free(arr);
return 0;
}
```
在这个代码中,我们首先创建了一个二叉树,并通过用户输入的数据填充它。接着,我们分别实现了中序、先序和后序遍历的递归函数。在`main`函数中,我们创建树、调用遍历函数并打印结果。
阅读全文