鱼C论坛

 找回密码
 立即注册
查看: 1572|回复: 2

树的创建和输出

[复制链接]
发表于 2023-11-5 09:22:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
树的创建和输出
(1)从键盘输入树的数据,从显示器上输出树;
(2)从磁盘文件读取数据建立树,将树的数据输出到磁盘文件中;
(3)实现Tree类的成员函数:
void Tree<T>::ReadTree(const char* filename)
void Tree<T>::WriteTree(const char* filename)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-5 09:23:12 | 显示全部楼层
问题:树的创建和输出

解答:下面是实现Tree类的成员函数ReadTree和WriteTree的详细解释。

1. ReadTree函数的实现:
  1. void Tree<T>::ReadTree(const char* filename) {
  2.     // 打开文件
  3.     ifstream file(filename);
  4.     if (!file.is_open()) {
  5.         cout << "无法打开文件" << endl;
  6.         return;
  7.     }

  8.     // 清空当前树的数据
  9.     Clear();

  10.     // 读取文件中的数据并创建树
  11.     T data;
  12.     while (file >> data) {
  13.         Insert(data);
  14.     }

  15.     // 关闭文件
  16.     file.close();
  17. }
复制代码

ReadTree函数的作用是从磁盘文件中读取数据,并根据这些数据创建树。首先,我们打开指定的文件,并检查是否成功打开。然后,我们清空当前树的数据,以便重新建立树。接下来,我们使用一个循环来读取文件中的数据,并将每个数据插入到树中。最后,我们关闭文件。

2. WriteTree函数的实现:
  1. void Tree<T>::WriteTree(const char* filename) {
  2.     // 打开文件
  3.     ofstream file(filename);
  4.     if (!file.is_open()) {
  5.         cout << "无法打开文件" << endl;
  6.         return;
  7.     }

  8.     // 递归地将树的数据写入文件
  9.     WriteTreeHelper(root, file);

  10.     // 关闭文件
  11.     file.close();
  12. }

  13. void Tree<T>::WriteTreeHelper(Node* node, ofstream& file) {
  14.     if (node == nullptr) {
  15.         return;
  16.     }

  17.     // 先写入左子树
  18.     WriteTreeHelper(node->left, file);

  19.     // 写入当前节点的数据
  20.     file << node->data << " ";

  21.     // 再写入右子树
  22.     WriteTreeHelper(node->right, file);
  23. }
复制代码

WriteTree函数的作用是将树的数据输出到指定的磁盘文件中。首先,我们打开指定的文件,并检查是否成功打开。然后,我们使用递归的方式将树的数据写入文件。WriteTreeHelper函数是一个辅助函数,用于递归地遍历树并将数据写入文件。在每个节点上,我们先写入左子树,然后写入当前节点的数据,最后写入右子树。最后,我们关闭文件。

这样,我们就实现了从键盘输入树的数据并输出树,以及从磁盘文件读取数据建立树并将树的数据输出到磁盘文件中的功能。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-5 09:25:11 | 显示全部楼层
从键盘输入树的数据,从显示器上输出树:

要从键盘输入树的数据并输出到显示器上,可以使用递归的方式构建树,并使用中序遍历打印树的节点值。

下面是一个示例代码:
  1. ++
  2. #include <iostream>
  3. struct Node {
  4.     int data;
  5.     Node* left;
  6.     Node* right;
  7.     Node(int value) : data(value), left(nullptr), right(nullptr) {}
  8. };
  9. Node* createTree() {
  10.     int data;
  11.     std::cout << "请输入节点值(-1表示空节点):";
  12.     std::cin >> data;
  13.     if (data == -1) {
  14.         return nullptr;
  15.     }
  16.     Node* newNode = new Node(data);
  17.     std::cout << "输入节点 " << data << " 的左子树:" << std::endl;
  18.     newNode->left = createTree();
  19.     std::cout << "输入节点 " << data << " 的右子树:" << std::endl;
  20.     newNode->right = createTree();
  21.     return newNode;
  22. }
  23. void inOrderTraversal(Node* root) {
  24.     if (root == nullptr) {
  25.         return;
  26.     }
  27.     inOrderTraversal(root->left);
  28.     std::cout << root->data << " ";
  29.     inOrderTraversal(root->right);
  30. }
  31. int main() {
  32.     Node* root = createTree();
  33.     std::cout << "树的中序遍历结果为:";
  34.     inOrderTraversal(root);
  35.     return 0;
  36. }
复制代码

运行以上代码,你可以按照提示依次输入树的节点值。输入完成后,程序会递归构建树,并将树的中序遍历结果输出到显示器上。

从磁盘文件读取数据建立树,将树的数据输出到磁盘文件中:

要从磁盘文件读取数据建立树,并将树的数据输出到磁盘文件中,可以使用文件输入/输出流进行操作。

下面是一个示例代码:
  1. ++
  2. #include <iostream>
  3. #include <fstream>
  4. struct Node {
  5.     int data;
  6.     Node* left;
  7.     Node* right;
  8.     Node(int value) : data(value), left(nullptr), right(nullptr) {}
  9. };
  10. Node* createTreeFromFile(std::ifstream& inputFile) {
  11.     int data;
  12.     inputFile >> data;
  13.     if (data == -1) {
  14.         return nullptr;
  15.     }
  16.     Node* newNode = new Node(data);
  17.     newNode->left = createTreeFromFile(inputFile);
  18.     newNode->right = createTreeFromFile(inputFile);
  19.     return newNode;
  20. }
  21. void inOrderTraversal(Node* root, std::ofstream& outputFile) {
  22.     if (root == nullptr) {
  23.         return;
  24.     }
  25.     inOrderTraversal(root->left, outputFile);
  26.     outputFile << root->data << " ";
  27.     inOrderTraversal(root->right, outputFile);
  28. }
  29. void TreeToFile(const char* filename) {
  30.     std::ifstream inputFile(filename);
  31.     Node* root = createTreeFromFile(inputFile);
  32.     inputFile.close();
  33.     std::ofstream outputFile("output.txt");
  34.     inOrderTraversal(root, outputFile);
  35.     outputFile.close();
  36. }
  37. int main() {
  38.     TreeToFile("input.txt");
  39.     return 0;
  40. }
复制代码

在上述代码中,我们假设从名为input.txt的文件中读取树的数据。文件中的数据应按照先序遍历的顺序排列,其中空节点用-1表示。

程序会读取文件中的数据,并递归构建树。然后,它将树的中序遍历结果输出到名为output.txt的文件中。

希望这些代码能够帮助你理解如何创建和输出树。如果有其他问题,请随时提问!

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 01:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表