lazy-xy 发表于 2023-11-5 09:22:19

树的创建和输出

树的创建和输出
(1)从键盘输入树的数据,从显示器上输出树;
(2)从磁盘文件读取数据建立树,将树的数据输出到磁盘文件中;
(3)实现Tree类的成员函数:
void Tree<T>::ReadTree(const char* filename)
void Tree<T>::WriteTree(const char* filename)

isdkz 发表于 2023-11-5 09:23:12

问题:树的创建和输出

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

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

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

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

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

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

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

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

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

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

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

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

    // 再写入右子树
    WriteTreeHelper(node->right, file);
}

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

这样,我们就实现了从键盘输入树的数据并输出树,以及从磁盘文件读取数据建立树并将树的数据输出到磁盘文件中的功能。

Mike_python小 发表于 2023-11-5 09:25:11

从键盘输入树的数据,从显示器上输出树:

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

下面是一个示例代码:

++
#include <iostream>

struct Node {
    int data;
    Node* left;
    Node* right;

    Node(int value) : data(value), left(nullptr), right(nullptr) {}
};

Node* createTree() {
    int data;
    std::cout << "请输入节点值(-1表示空节点):";
    std::cin >> data;

    if (data == -1) {
      return nullptr;
    }

    Node* newNode = new Node(data);
    std::cout << "输入节点 " << data << " 的左子树:" << std::endl;
    newNode->left = createTree();
    std::cout << "输入节点 " << data << " 的右子树:" << std::endl;
    newNode->right = createTree();

    return newNode;
}

void inOrderTraversal(Node* root) {
    if (root == nullptr) {
      return;
    }

    inOrderTraversal(root->left);
    std::cout << root->data << " ";
    inOrderTraversal(root->right);
}

int main() {
    Node* root = createTree();
    std::cout << "树的中序遍历结果为:";
    inOrderTraversal(root);

    return 0;
}


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

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

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

下面是一个示例代码:

++
#include <iostream>
#include <fstream>

struct Node {
    int data;
    Node* left;
    Node* right;

    Node(int value) : data(value), left(nullptr), right(nullptr) {}
};

Node* createTreeFromFile(std::ifstream& inputFile) {
    int data;
    inputFile >> data;

    if (data == -1) {
      return nullptr;
    }

    Node* newNode = new Node(data);
    newNode->left = createTreeFromFile(inputFile);
    newNode->right = createTreeFromFile(inputFile);

    return newNode;
}

void inOrderTraversal(Node* root, std::ofstream& outputFile) {
    if (root == nullptr) {
      return;
    }

    inOrderTraversal(root->left, outputFile);
    outputFile << root->data << " ";
    inOrderTraversal(root->right, outputFile);
}

void TreeToFile(const char* filename) {
    std::ifstream inputFile(filename);
    Node* root = createTreeFromFile(inputFile);
    inputFile.close();

    std::ofstream outputFile("output.txt");
    inOrderTraversal(root, outputFile);
    outputFile.close();
}

int main() {
    TreeToFile("input.txt");

    return 0;
}


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

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

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

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 树的创建和输出