树或森林采用二叉链表存储表示。 (1)创建树或森林,输入各节点时,以树或森林对应的二树的先序方式输入,需用#补齐空节点 (2)求树或森林的高度 输入样例:AB#C#D##EF##GH#IJ#### 输出样例:3 C语言完整代码
时间: 2024-09-29 19:01:50 浏览: 28
在C语言中,我们可以使用递归的方式来实现树或森林(这里假设是二叉树)的创建、高度计算以及基于先序遍历的方式构建二叉链表结构。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点
typedef struct TreeNode {
char data;
struct TreeNode* left;
struct TreeNode* right;
} Node;
// 创建新节点
Node* newNode(char data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 先序遍历并构造二叉链表
void createTree(char* input, Node** root, int index) {
if (*input == '#') {
*root = NULL;
return;
}
Node* newNode = newNode(*input);
*root = newNode;
index++;
// 递归处理左子树和右子树
createTree(input + 1, &newNode->left, index);
createTree(input + index++, &newNode->right, index);
}
// 计算树的高度
int height(Node* root) {
if (root == NULL)
return 0;
else {
int left_height = height(root->left);
int right_height = height(root->right);
return (left_height > right_height ? left_height : right_height) + 1;
}
}
// 打印先序遍历结果
void printPreorder(Node* root) {
if (root != NULL) {
printf("%c", root->data);
printPreorder(root->left);
printPreorder(root->right);
}
}
int main() {
char input[] = "AB#C#D##EF##GH#IJ####";
Node* root = NULL;
int len = strlen(input);
createTree(input, &root, 1); // 调用函数构建树
// 计算高度
int treeHeight = height(root);
printf("树或森林的高度: %d\n", treeHeight);
// 打印先序遍历的结果
printf("先序遍历结果: ");
printPreorder(root);
printf("\n");
return 0;
}
```
这个程序首先通过输入字符串创建了二叉树,并使用递归构建二叉链表表示。接着计算树的高度,最后打印出先序遍历的结果。
阅读全文