????????递归遍历一棵树,将获取的信息以键值对的形式存放到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;
}