用C语言编程实现:已知先序序列,建立一棵二叉树,输出后序遍历序列,并计算这棵二叉树的高度。 输入格式: 输入在一行中给出二叉树的先序序列。*表示空格 输出格式: 输出共二行,第一行是二叉树的后序遍历序列,第二行是二叉树的高度
时间: 2024-10-17 17:06:28 浏览: 65
在C语言中,我们可以使用递归的方式来构建二叉树并实现后序遍历以及高度计算。首先,我们需要定义结构体`Node`来存储节点信息,然后通过先序遍历的第一个元素作为根节点,其余元素依次插入左右子树。以下是具体的实现步骤:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct Node {
int data;
struct Node* left;
struct Node* right;
} Node;
// 创建新节点
Node* newNode(int data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
// 根据先序遍历构造二叉树
Node* buildTree(char* preorder[], int start, int end) {
if (start > end)
return NULL;
Node* root = newNode(preorder[start]);
int i;
for (i = start + 1; i <= end && preorder[i] != '\0'; ++i) {
if (preorder[i] < preorder[start])
root->left = buildTree(preorder, start + 1, i - 1);
else
root->right = buildTree(preorder, i, end - 1);
}
return root;
}
// 后序遍历函数
void printPostorder(Node* root) {
if (root == NULL)
return;
printPostorder(root->left);
printPostorder(root->right);
printf("%d ", root->data); // 输出节点值
}
// 计算树的高度
int height(Node* root) {
if (root == NULL)
return 0;
int leftHeight = height(root->left);
int rightHeight = height(root->right);
return (leftHeight > rightHeight ? leftHeight + 1 : rightHeight + 1);
}
int main() {
char* preorder[] = {"4", "2", "5", "1", "6", "3", NULL};
int n = sizeof(preorder) / sizeof(preorder[0]);
Node* root = buildTree(preorder, 0, n - 1);
printf("后序遍历结果:\n");
printPostorder(root);
printf("\n");
printf("二叉树的高度: %d\n", height(root));
return 0;
}
```
在这个程序中,`buildTree`函数用于创建二叉树,`printPostorder`负责后序遍历输出,而`height`函数则计算树的高度。在`main`函数中,我们提供了一个示例的先序序列`4 2 5 1 6 3`,然后进行相应的操作并打印结果。注意,这里假设输入的先序序列中不会有多余的空间字符。
阅读全文