【c++】遍历一棵树来获取信息,并根据这些信息用map生成另一棵树,新树的键是string类型,值是char*类型

发布时间:2023年12月30日

主要思路

????????递归遍历一棵树,将获取的信息以键值对的形式存放到c++的vector容器中,然后遍历vector容器中的键值对信息,利用map容器生成个另一棵树。

? ? ? ? 具体来说,就是使用std::pair<std::string, const char*>类型的向量infoVector来存储节点信息,其中第一个元素为键(std::string类型),第二个元素为值(const char*类型)。然后,我们创建一个std::map<std::string, const char*>容器来存储信息,并使用infoMap[info.first] = info.second将信息作为键和值插入到infoMap中。

? ? ? ? 然后,我们可以通过先序遍历、中序遍历或者后序遍历的方式来验证生成的树结构是否与我们的预期相符。

代码示例

以下给出一个代码示例以供参考:

#include <iostream>
#include <map>
#include <string>

struct Node {
    std::string key;
    Node* left;
    Node* right;
};

// 递归插入节点到二叉搜索树
void insertNode(Node*& root, const std::string& key) {
    if (root == nullptr) {
        root = new Node;
        root->key = key;
        root->left = root->right = nullptr;
    } else if (key < root->key) {
        insertNode(root->left, key);
    } else {
        insertNode(root->right, key);
    }
}

// 中序遍历输出二叉搜索树
void inorderTraversal(const Node* root) {
    if (root != nullptr) {
        inorderTraversal(root->left);
        std::cout << root->key << " ";
        inorderTraversal(root->right);
    }
}

int main() {
    // 遍历原始树并获取信息
    // 这里假设你已经获得了一个包含节点信息的vector,命名为infoVector
    std::vector<std::pair<std::string, const char*>> infoVector = {
        {"apple", "A"},
        {"banana", "B"},
        {"orange", "O"},
        {"grape", "G"},
        {"kiwi", "K"}
    };

    std::map<std::string, const char*> infoMap; // 使用map容器存储信息

    for (const auto& info : infoVector) {
        // 将信息作为键和值插入到map中
        infoMap[info.first] = info.second;
    }

    Node* newTreeRoot = nullptr; // 新树的根节点

    for (const auto& pair : infoMap) {
        insertNode(newTreeRoot, pair.first);
    }

    std::cout << "Inorder Traversal of New Tree: ";
    inorderTraversal(newTreeRoot);
    
    system("pause");
    return 0;
}

文章来源:https://blog.csdn.net/m0_56367027/article/details/135308293
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。