用C语言写一个从键盘接收扩展先序序列,以二叉链表作为存储结构,建立二叉树。计算二叉树的高度,并输出的代码
时间: 2024-12-14 20:27:24 浏览: 5
头歌数据结构二叉树的二叉链表存储及基本操作
5星 · 资源好评率100%
在C语言中,我们可以按照以下步骤编写程序来接收二叉树的扩展前序序列并构建对应的二叉树。这里假设我们有一个简单的二叉链表节点结构以及相应的插入和计算高度函数:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉链表节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 插入节点到二叉树
TreeNode* insertNode(TreeNode** root, int val) {
if (*root == NULL) {
*root = (TreeNode*)malloc(sizeof(TreeNode));
(*root)->val = val;
(*root)->left = NULL;
(*root)->right = NULL;
} else if (val < (*root)->val) {
(*root)->left = insertNode(&(*root)->left, val);
} else {
(*root)->right = insertNode(&(*root)->right, val);
}
return *root;
}
// 计算二叉树的高度
int height(TreeNode* root) {
if (root == NULL) {
return 0;
} else {
int leftHeight = height(root->left);
int rightHeight = height(root->right);
return 1 + (leftHeight > rightHeight ? leftHeight : rightHeight);
}
}
// 打印二叉树的扩展前序遍历
void printPreorder(TreeNode* root) {
if (root != NULL) {
printf("%d ", root->val);
printPreorder(root->left);
printPreorder(root->right);
}
}
int main() {
// 输入扩展前序序列
char input[100];
printf("请输入二叉树的扩展前序序列(用空格分隔元素): ");
scanf("%s", input);
// 将输入转换为整数序列
int* seq = malloc(sizeof(int) * strlen(input) + 1);
for (int i = 0; input[i] != '\0'; ++i) {
seq[i] = atoi(input + i);
}
// 创建根节点,并逐步构建二叉树
TreeNode* root = NULL;
for (int num : seq) {
root = insertNode(&root, num);
}
// 输出二叉树的高度
int treeHeight = height(root);
printf("\n二叉树的高度为:%d\n", treeHeight);
// 输出二叉树的扩展前序遍历
printf("二叉树的扩展前序遍历为:");
printPreorder(root);
printf("\n");
// 清理内存
free(seq);
return 0;
}
```
运行这个程序,它会提示用户输入二叉树的扩展前序序列,然后构建树并计算其高度,最后输出扩展前序遍历结果。
阅读全文