//1.所需头文件 #include <iostream> using namespace std; //2.二叉树的二叉链表存储表示 typedef char TElemType; typedef struct BiTNode { TElemType data; struct BiTNode *lchild, *rchild; }BiTNode,*BiTree; void CreateBiTree(BiTree &T) { cin>>ch; if
时间: 2025-06-25 19:12:41 浏览: 4
### C++ 中基于二叉链表存储的 `CreateBiTree` 函数实现
在 C++ 的数据结构中,二叉树通常通过二叉链表来表示。这种存储方式使用指针连接节点,每个节点包含三个部分:左子树指针、右子树指针和数据域。对于 `CreateBiTree` 函数而言,它主要用于按照某种输入顺序(通常是先序遍历)构建二叉树。
以下是基于先序递归遍历创建二叉树的 `CreateBiTree` 实现:
#### 节点定义
首先定义二叉树节点的数据结构:
```cpp
typedef char TElemType; // 假设节点数据为字符型
struct BiTNode {
TElemType data;
struct BiTNode* lchild, *rchild;
};
```
#### 创建函数
下面是完整的 `CreateBiTree` 函数实现:
```cpp
#include <iostream>
using namespace std;
// 定义二叉树节点
struct BiTNode {
char data;
struct BiTNode* lchild, *rchild;
};
// 使用先序递归方法创建二叉树
bool CreateBiTree(BiTNode*& T) {
char ch;
cin >> ch; // 输入当前结点的值
if (ch == '.') { // 如果遇到 '.' 表示为空节点
T = nullptr;
} else {
T = new BiTNode(); // 创建新节点
if (!T) return false; // 内存分配失败
T->data = ch; // 设置节点数据
if (!CreateBiTree(T->lchild)) return false; // 递归创建左子树
if (!CreateBiTree(T->rchild)) return false; // 递归创建右子树
}
return true;
}
```
此代码实现了以下逻辑:
- 用户通过标准输入提供二叉树的先序序列,其中 `'.'` 表示空节点[^1]。
- 对于每一个读取到的字符,如果它是 `'.'`,则将其视为 NULL;否则,创建一个新的节点并为其赋值[^2]。
- 左右子树分别通过递归调用完成构建[^3]。
#### 示例运行流程
假设输入的先序序列为 `ABD..E..CF..G..`,对应的二叉树结构如下:
```
A
/ \
B C
/ \ \
D E G
F
```
程序会逐步解析该字符串,并按需生成相应的节点及其链接关系。
---
###
阅读全文