二叉树的建立和前序,中序,后序,遍历(给定节点以及其之间的关系)

news/2024/7/3 2:19:27

 

其中键值对的建立最为关键,不熟悉unorder_mapicon-default.png?t=N7T8https://blog.csdn.net/zou_albert/article/details/106983268?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169528103016800211567279%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169528103016800211567279&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-106983268-null-null.142^v94^insert_down28v1&utm_term=unordered_map&spm=1018.2226.3001.4187的同学,可以查看链接这篇文章, 

#include<iostream>
#include<unordered_map>
#include<vector>
using namespace std;
//节点结构体
struct treenode {
    char val;
    treenode* left;
    treenode* right;
    treenode(char val) :val(val), left(nullptr), right(nullptr) {}//此处{},和char val不能忘记了
};

//建立二叉树
treenode* buildtree(unordered_map<char, pair<char,char>>& nodemap, char rootvalue)//需要参数:键值对,根节点
{
    if (rootvalue == '0')
        return nullptr;
    treenode* root = new treenode(rootvalue);
    char leftchild = nodemap[rootvalue].first;
    char rightchild= nodemap[rootvalue].second;
    root->left = buildtree(nodemap, leftchild);
    root->right = buildtree(nodemap, rightchild);
    return root;
}



void pretree(treenode* root)
{
    if (root == nullptr)
    {
        return;
    }
    cout << root->val;
    pretree(root->left);
    pretree(root->right);
}
void midtree(treenode* root)
{
    if (root == nullptr)
    {
        return;
    }
    midtree(root->left);
    cout << root->val;
    midtree(root->right);
}
void posttree(treenode* root)
{
    if (root == nullptr)
    {
        return;
    }
    posttree(root->left);
    posttree(root->right);
    cout << root->val;
}
int main()
{
    int n;
    cin >> n;
    unordered_map<char, pair<char, char>> nodemap;//将键类型与值进行映射,建立的无序哈希表
    vector<char>index(n+1, '0');//这是节点的字母,n+1维,因为题目中F的下标是从1开始计算的,数组同样
    vector<vector<int>>num(n + 1, vector<int>(2,0));//这是建立了n+1维,2列的数组进行存储
    for (int i = 1; i <= n; i++)
    {
        cin >> index[i] >> num[i][0] >> num[i][1];
    }
    //生成键值对的nodemap
    for (int i = 1; i <= n; i++)
    {
        nodemap[index[i]] = make_pair(index[num[i][0]], index[num[i][1]]);//此处最应该注意,我在敲的时候忘记了加上index索引
    }
  
    //建立二叉树
    treenode* root = buildtree(nodemap, index[1]);
    pretree(root);
    cout << endl;
    midtree(root);
    cout << endl;
    posttree(root);
    cout << endl;
    return 0;
}

 


http://lihuaxi.xjx100.cn/news/1561273.html

相关文章

alist windows桌面版下载安装

官网 Desktop | AList Docs 点击下载windows版本 安装 双击exe 修改安装路径 太可惜了&#xff0c;需要收费

安装清华源到你的 Python 环境中

有时候我们下载包的时候非常慢&#xff0c;加个清华源速度可以提高&#xff0c;但是如果每次安装包都需要在前面加一个清华源的链接就比较麻烦。 所以可以尝试下面的方法&#xff1a; 首先 你需要安装 pip 的镜像源到你的 Python 环境中&#xff0c;以便从清华大学镜像站下载软…

会C++还需要再去学Python吗?

提到的C、数据结构与算法、操作系统、计算机网络和数据库技术等确实是计算机科学中非常重要的基础知识领域&#xff0c;对于软件开发和计算机工程师来说&#xff0c;它们是必备的核心知识。掌握这些知识对于开发高性能、可靠和安全的应用程序非常重要。Python作为一种脚本语言&…

【uniapp】开发app运行到手机预览(运行到安卓app基座)

1、先安装App真机运行插件 2、手机打开调试模式&#xff08;开发者模式&#xff09;/打开usb安装&#xff0c;因为运行到手机需要下载安装手机端HBuilder调试基座… 3、运行到安卓app基座 4、等待安装好应用基座后便可以预览项目

Hadoop源码阅读(三):HDFS上传

说明&#xff1a; 1.Hadoop版本&#xff1a;3.1.3 2.阅读工具&#xff1a;IDEA 2023.1.2 3.源码获取&#xff1a;Index of /dist/hadoop/core/hadoop-3.1.3 (apache.org) 4.工程导入&#xff1a;下载源码之后得到 hadoop-3.1.3-src.tar.gz 压缩包&#xff0c;在当前目录打开Pow…

数据结构与算法:排序算法(2)

目录 堆排序 使用步骤 代码实现 计数排序 适用范围 过程 代码实现 排序优化 桶排序 工作原理 代码实现 堆排序 二叉堆的特性&#xff1a; 1. 最大堆的堆顶是整个堆中的最大元素 2. 最小堆的堆顶是整个堆中的最小元素 以最大堆为例&#xff0c;如果删除一个最大堆的…

网络安全基础知识点_网络安全知识点

文章目录 一、网络安全概述 1.1 定义1.2 信息安全特性1.3 网络安全的威胁1.4 网络安全的特征 二、入侵方式 2.1 黑客 2.1.1 入侵方法2.1.2 系统的威胁 2.2 IP欺骗与防范 2.2.1 TCP等IP欺骗基础知识2.2.2 IP欺骗可行的原因2.2.3 IP欺骗过程2.2.4 IP欺骗原理2.2.5 IP欺骗防范 2.…

浅谈基于LoRa技术下智能建筑能耗管理系统的分析与设计

安科瑞 华楠 摘要&#xff1a;城市建设步伐加快背景下&#xff0c;对城市建筑能耗管理系统的应用提出更高要求。从当前各类公共建筑物运营情况看&#xff0c;能源消耗问题仍较为突出&#xff0c;传统依托于计算机、测控单元与通讯设备单位工具的系统管理模式&#xff0c;并不能…