当前位置: 首页 > news >正文

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

主要思路

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

相关文章:

  • Kubernetes网络-VXLAN
  • gn入门(Chromium)
  • Windows电脑引导损坏?按照这个教程能修复
  • 第二十六周:学习笔记
  • Linux 安装 mysql【使用yum源进行安装】
  • Android 万能的RecyclerView适配器(BaseRecyclerViewAdapterHelper)
  • BloombergGPT—金融领域大模型
  • oracle-存储结构
  • 扫雷(c语言)
  • JAVA-ArrayList的相关坑
  • SQL高级:存储过程和触发器
  • MR实战:统计总分与平均分
  • 分库分表之Mycat应用学习二
  • 【网络面试(2)】DNS原理-域名和IP地址的查询转换
  • C#学习笔记 - C#基础知识 - C#从入门到放弃 - C# Windows窗体技术及基础控件(一)
  • [数据结构]链表的实现在PHP中
  • Apache Zeppelin在Apache Trafodion上的可视化
  • ES2017异步函数现已正式可用
  • fetch 从初识到应用
  • JavaScript DOM 10 - 滚动
  • JavaScript 基础知识 - 入门篇(一)
  • Javascript编码规范
  • Linux中的硬链接与软链接
  • nodejs调试方法
  • node入门
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Solarized Scheme
  • Spring Cloud Feign的两种使用姿势
  • SpringBoot 实战 (三) | 配置文件详解
  • 构建二叉树进行数值数组的去重及优化
  • 力扣(LeetCode)21
  • 那些被忽略的 JavaScript 数组方法细节
  • 如何用vue打造一个移动端音乐播放器
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 一道闭包题引发的思考
  • 终端用户监控:真实用户监控还是模拟监控?
  • Semaphore
  • Spring Batch JSON 支持
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (27)4.8 习题课
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (八)Flask之app.route装饰器函数的参数
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .gitignore文件设置了忽略但不生效