一棵二叉树的先序序列为ABDFCEGH,中序序列为BFDAGEHC,这个二叉树长什么样
时间: 2025-05-29 19:25:38 浏览: 21
### 构造二叉树的过程
为了根据先序序列 `ABDFCEGH` 和中序序列 `BFDAGEHC` 还原二叉树结构,可以按照以下方法实现:
#### 数据结构定义
首先定义二叉树节点的数据结构如下:
```c
typedef struct BiTNode {
char data;
struct BiTNode *Lchild, *Rchild; // 左右孩子指针
} BiTNode, *BiTree;
```
#### 建立二叉树的核心逻辑
通过递归的方式建立二叉树。以下是具体过程描述:
1. **选取根节点**:先序遍历的第一个字符即为当前子树的根节点。
2. **划分左右子树**:在中序遍历序列中找到该根节点的位置,则其左侧部分为左子树对应的中序序列,右侧部分为右子树对应的中序序列。
3. **递归构造**:分别对左子树和右子树重复上述操作。
下面是完整的 C 实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点
typedef struct BiTNode {
char data;
struct BiTNode *Lchild, *Rchild; // 左右孩子指针
} BiTNode, *BiTree;
// 查找目标值在数组中的索引位置
int findIndex(char target, const char array[], int start, int end) {
for (int i = start; i <= end; ++i) {
if (array[i] == target) return i;
}
return -1; // 如果未找到返回-1
}
// 根据先序和中序序列构建二叉树
BiTree buildTree(const char preorder[], const char inorder[], int preStart, int preEnd, int inStart, int inEnd) {
if (preStart > preEnd || inStart > inEnd) return NULL;
// 创建新节点作为当前子树的根节点
BiTree root = (BiTNode *)malloc(sizeof(BiTNode));
root->data = preorder[preStart];
root->Lchild = root->Rchild = NULL;
// 找到根节点在中序序列中的位置
int inRootIndex = findIndex(root->data, inorder, inStart, inEnd);
// 计算左子树长度
int leftSize = inRootIndex - inStart;
// 递归构造左子树和右子树
root->Lchild = buildTree(preorder, inorder, preStart + 1, preStart + leftSize, inStart, inRootIndex - 1);
root->Rchild = buildTree(preorder, inorder, preStart + leftSize + 1, preEnd, inRootIndex + 1, inEnd);
return root;
}
// 先序遍历打印二叉树
void preOrderTraversal(BiTree T) {
if (T != NULL) {
printf("%c ", T->data);
preOrderTraversal(T->Lchild);
preOrderTraversal(T->Rchild);
}
}
// 主函数测试
int main() {
const char preorder[] = "ABDFCEGH"; // 先序序列
const char inorder[] = "BFDAGEHC"; // 中序序列
int n = sizeof(preorder) / sizeof(preorder[0]) - 1;
// 调用buildTree函数构建二叉树
BiTree root = buildTree(preorder, inorder, 0, n - 1, 0, n - 1);
// 输出先序遍历验证结果
printf("重建后的二叉树先序遍历: ");
preOrderTraversal(root);
printf("\n");
return 0;
}
```
#### 结果分析
运行以上程序后,会得到与原始先序序列一致的结果,证明二叉树已成功恢复。
---
###
阅读全文
相关推荐


















