1.在主函数中定义一个菜单,包含以上三个问题的选项。 2.根据用户选择的不同,调用相应的函数,并输出结果。 3.可以通过手工输入字符序列或者从文件读入,来测试二叉树的构建算法。 4.可以手工构建一棵二叉树,并用中序遍历算法进行测试。 5.可以手工构建一棵二叉树,并用叶子结点计算算法进行测试。程序C语言
时间: 2024-03-18 18:41:19 浏览: 75
二叉树的几种操作,包括递归先序建立二叉树、先序遍历、中序遍历、后序遍历、非递归的各种遍历
以下是一个基本的程序框架,实现了菜单选项、手动输入字符序列构建二叉树、中序遍历、计算叶子结点数的功能。注意,该程序仅为示例,实际应用中需要根据需要进行修改和完善。
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结构体定义
typedef struct TreeNode {
char data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 递归函数,构建二叉树
TreeNode* buildTree(char* str, int* index) {
if (str[*index] == '\0' || str[*index] == ')') {
return NULL;
}
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = str[*index];
node->left = NULL;
node->right = NULL;
(*index)++;
if (str[*index] == '(') {
(*index)++;
node->left = buildTree(str, index);
}
if (str[*index] == '(') {
(*index)++;
node->right = buildTree(str, index);
}
(*index)++;
return node;
}
// 中序遍历,输出二叉树节点值
void inorderTraversal(TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
printf("%c ", root->data);
inorderTraversal(root->right);
}
// 计算叶子结点数
int countLeafNodes(TreeNode* root) {
if (root == NULL) {
return 0;
}
if (root->left == NULL && root->right == NULL) {
return 1;
}
return countLeafNodes(root->left) + countLeafNodes(root->right);
}
int main() {
int choice;
char str[100];
TreeNode* root = NULL;
int index = 0;
do {
printf("1. 构建二叉树\n");
printf("2. 中序遍历\n");
printf("3. 计算叶子结点数\n");
printf("0. 退出\n");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入二叉树序列:");
scanf("%s", str);
root = buildTree(str, &index);
printf("构建成功!\n");
break;
case 2:
printf("中序遍历结果:");
inorderTraversal(root);
printf("\n");
break;
case 3:
printf("叶子结点数为:%d\n", countLeafNodes(root));
break;
case 0:
printf("再见!\n");
break;
default:
printf("输入错误,请重新选择!\n");
break;
}
} while (choice != 0);
return 0;
}
```
阅读全文