读取team.txt文件中的参赛队伍信息,将其存储在一个二叉排序树中。在每个节点上存储参赛队伍的编号,并将其他基本信息存储在该节点对应的数据结构体中。C++
时间: 2024-03-06 10:51:01 浏览: 90
好的,以下是一个简单的 C++ 代码,可以实现您的要求:
```cpp
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// 定义参赛队伍结构体
struct Team {
string name; // 队名
string captain; // 队长
int score; // 得分
};
// 定义二叉排序树节点
struct BSTNode {
int id; // 队伍编号
Team team; // 参赛队伍信息
BSTNode* left; // 左子节点
BSTNode* right; // 右子节点
};
// 插入节点
BSTNode* insert(BSTNode* root, int id, Team team) {
if (root == nullptr) {
BSTNode* node = new BSTNode();
node->id = id;
node->team = team;
node->left = nullptr;
node->right = nullptr;
return node;
}
if (id < root->id) {
root->left = insert(root->left, id, team);
} else {
root->right = insert(root->right, id, team);
}
return root;
}
// 中序遍历二叉排序树
void inorder(BSTNode* root) {
if (root == nullptr) {
return;
}
inorder(root->left);
cout << "队伍编号: " << root->id << endl;
cout << "队名: " << root->team.name << endl;
cout << "队长: " << root->team.captain << endl;
cout << "得分: " << root->team.score << endl;
cout << endl;
inorder(root->right);
}
int main() {
// 读取文件
ifstream ifs("team.txt");
if (!ifs) {
cerr << "Failed to open file." << endl;
return 1;
}
int id, score;
string name, captain;
BSTNode* root = nullptr;
while (ifs >> id >> name >> captain >> score) {
Team team = {name, captain, score};
root = insert(root, id, team);
}
ifs.close();
// 中序遍历二叉排序树
inorder(root);
return 0;
}
```
在这个代码中,我们首先定义了一个 `Team` 结构体,用于存储参赛队伍的基本信息。然后我们定义了一个 `BSTNode` 结构体,用于表示二叉排序树的一个节点,其中包含了一个队伍编号和一个 `Team` 结构体,以及左右子节点指针。
我们使用 `insert` 函数来向二叉排序树中插入节点。如果根节点为空,则直接创建新节点。否则,如果插入节点的队伍编号小于当前节点的队伍编号,则递归插入到当前节点的左子树中;否则,递归插入到当前节点的右子树中。
最后,我们使用 `inorder` 函数来中序遍历二叉排序树,并输出每个节点的队伍编号和基本信息。
希望这个例子对您有所帮助!
阅读全文