已知如下一棵二叉树对应的字符序列(层次遍历序列)为:ABC##EF#G####,其中‘#’表示节点对应的孩子结点为空。现给定一棵二叉树的字符序列,请使用二叉链表构造该二叉树,并输出该二叉树的中序遍历。c语言代码
时间: 2024-12-06 20:23:11 浏览: 48
在C语言中,我们可以利用队列数据结构来构建二叉树并进行中序遍历。首先,我们需要定义二叉树节点结构和两个辅助函数:插入节点和中序遍历。这里是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义二叉树节点结构
typedef struct TreeNode {
char val;
struct TreeNode *left, *right;
} TreeNode;
// 插入节点到二叉树
TreeNode* insertNode(TreeNode** root, char val) {
if (*root == NULL) {
*root = (TreeNode*)malloc(sizeof(TreeNode));
(*root)->val = val;
(*root)->left = (*root)->right = NULL;
} else if (val <= (*root)->val) {
(*root)->left = insertNode(&(*root)->left, val);
} else {
(*root)->right = insertNode(&(*root)->right, val);
}
return *root;
}
// 中序遍历二叉树
void inorderTraversal(TreeNode* root, char result[]) {
if (root != NULL) {
inorderTraversal(root->left, result);
result[0] = root->val;
result++;
inorderTraversal(root->right, result);
}
}
// 主函数
int main() {
char sequence[] = "ABC##EF#G####";
int len = strlen(sequence);
// 创建根节点
TreeNode* root = NULL;
// 从序列中逐个插入节点
for (int i = 0; i < len; i++) {
if (sequence[i] != '#') {
root = insertNode(&root, sequence[i]);
}
}
// 结果数组用于存储中序遍历结果
char result[len];
memset(result, 0, sizeof(result));
// 进行中序遍历并打印结果
inorderTraversal(root, result);
printf("中序遍历的结果是: ");
for (int i = 0; result[i]; i++) {
printf("%c", result[i]);
}
return 0;
}
```
当你运行这个程序,它会根据输入的层次遍历序列构建二叉树,并输出中序遍历的结果。注意,这里的代码假设输入的字符序列总是有效的二叉树层次遍历。如果`#`的数量和节点值的数量不匹配,可能会导致错误。
阅读全文
相关推荐















