利用C语言编程实现二叉树的建立、遍历过程及二叉树遍历算法的应用,要求:在主函数使用菜单形式调用各操作。
时间: 2024-12-10 07:55:44 浏览: 14
C语言实现二叉树遍历的迭代算法
5星 · 资源好评率100%
在C语言中,我们可以使用结构体来表示二叉树,并实现基本的二叉树操作,包括建立树、遍历(前序、中序、后序)以及应用。下面是一个简单的示例,展示了如何使用菜单驱动的方式进行这些操作:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义二叉树节点结构
typedef struct TreeNode {
int data;
struct TreeNode* left, *right;
} Node;
// 创建新节点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->left = newNode->right = NULL;
return newNode;
}
// 后续遍历、前序遍历和中序遍历函数
void inOrderTraversal(Node* node) {
if (node != NULL) {
inOrderTraversal(node->left);
printf("%d ", node->data);
inOrderTraversal(node->right);
}
}
void preOrderTraversal(Node* node) {
if (node != NULL) {
printf("%d ", node->data);
preOrderTraversal(node->left);
preOrderTraversal(node->right);
}
}
void postOrderTraversal(Node* node) {
if (node != NULL) {
postOrderTraversal(node->left);
postOrderTraversal(node->right);
printf("%d ", node->data);
}
}
// 主函数,用于用户交互
void BinaryTreeMenu() {
int choice;
Node* root = NULL;
do {
printf("\n1. 创建新树\n2. 前序遍历\n3. 中序遍历\n4. 后序遍历\n5. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入节点数据(输入0结束):");
int data;
while (scanf("%d", &data) != EOF && data != 0) {
root = createNode(data);
if (data != 0) {
scanf("%d %d", &data, &data); // 假设输入当前节点的左右子节点数据
root->left = createNode(data);
root->right = createNode(data);
}
}
break;
case 2:
preOrderTraversal(root);
printf("\n");
break;
case 3:
inOrderTraversal(root);
printf("\n");
break;
case 4:
postOrderTraversal(root);
printf("\n");
break;
case 5:
printf("退出程序...\n");
break;
default:
printf("无效选择,请重新输入。\n");
}
} while (choice != 5);
}
int main() {
BinaryTreeMenu();
return 0;
}
```
在这个程序中,用户可以选择创建新树、执行各种遍历,或退出程序。需要注意的是,对于创建新树的操作,这里仅作简单示例,实际应用中可能会需要处理用户输入的子节点信息。
阅读全文