建立二叉树的二叉链表存储结构,1.假设二叉树的结点值是字符,根据输入的一棵二叉树的完整先序遍历序列建立一棵以二叉链表表示的二叉树。 2.对二叉树进行先序、中序和后序遍历操作,并输出遍历序列,观察输出的序列是否与逻辑上的序列一致。 3.主程序中要求设计一个菜单,允许用户通过菜单来多次选择执行哪一种遍历操作。C语言
时间: 2023-07-24 22:20:18 浏览: 293
数据结构-二叉树(Java实现)
好的,以下是C语言实现建立二叉树和遍历二叉树的代码,以及主程序中的菜单设计:
```c
#include<stdio.h>
#include<stdlib.h>
struct TreeNode {
char val; // 节点值
struct TreeNode* left; // 左子树
struct TreeNode* right; // 右子树
};
// 建立二叉树
struct TreeNode* createTree() {
char val;
scanf("%c", &val);
if (val == ' ') { // 如果当前节点的值为空格,则返回NULL
return NULL;
}
struct TreeNode* node = malloc(sizeof(struct TreeNode));
node->val = val;
node->left = createTree(); // 递归构建左子树
node->right = createTree(); // 递归构建右子树
return node;
}
// 先序遍历
void preOrder(struct TreeNode* root) {
if (root == NULL) {
return;
}
printf("%c ", root->val); // 访问节点的值
preOrder(root->left); // 递归遍历左子树
preOrder(root->right); // 递归遍历右子树
}
// 中序遍历
void inOrder(struct TreeNode* root) {
if (root == NULL) {
return;
}
inOrder(root->left); // 递归遍历左子树
printf("%c ", root->val); // 访问节点的值
inOrder(root->right); // 递归遍历右子树
}
// 后序遍历
void postOrder(struct TreeNode* root) {
if (root == NULL) {
return;
}
postOrder(root->left); // 递归遍历左子树
postOrder(root->right); // 递归遍历右子树
printf("%c ", root->val); // 访问节点的值
}
// 菜单设计
void menu(struct TreeNode* root) {
int choice;
do {
printf("请选择遍历方式:\n");
printf("1. 先序遍历\n");
printf("2. 中序遍历\n");
printf("3. 后序遍历\n");
printf("4. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("先序遍历序列为:");
preOrder(root);
printf("\n");
break;
case 2:
printf("中序遍历序列为:");
inOrder(root);
printf("\n");
break;
case 3:
printf("后序遍历序列为:");
postOrder(root);
printf("\n");
break;
case 4:
printf("程序已退出\n");
break;
default:
printf("请选择正确的操作\n");
break;
}
} while (choice != 4);
}
int main() {
printf("请输入二叉树的完整先序遍历序列:\n");
struct TreeNode* root = createTree(); // 建立二叉树
menu(root); // 菜单设计
return 0;
}
```
以上代码实现了建立二叉树和遍历二叉树的功能,并在主程序中设计了一个菜单,允许用户选择要执行的遍历操作。注意,在输入二叉树的完整先序遍历序列时,需要在每个节点值之间添加一个空格。
阅读全文