好像没有人搞\(\color{green}map\)反映,没有人用\(\color{green}map\)反映搞并查集!

\(\color{green}map\)第一个好处是作为一个数组,可以开很大!

我自认为\(\color{green}map\)是一个特别好的东西,如果你的数组要开很大,但会爆炸,就最好用\(\color{green}map\),可以把它当做普通的数组用。

比如:

map<int,int>x;

你可以把x数组当成普通数组用,不过要注意一点。

map<int,int>x;

你定义了x数组后,就不能使用c++的数组函数,比如memset

你就不能写

memset(a,0,sizeof(a));

\(\color{green}map\)第二个好处下标不一定是一个整数,可以甚至可以是一个字符串!

\(\color{blue}map<\)下标类型\(\color{blue},\)数值类型\(\color{blue}>;\)

比如:

map<string,char>a;
string st="123";
a[st]='1';

补充说明

\(\color{blue}map\)不仅可以开一维数组,还可以开二维数组。

比如:

map<int,map<int,int> /*注意这里是一定要有空格的,否则会编译错误*/>;

有了这些知识储备,我们可以更轻松地来做这道题。

首先,题目中看到了遍历,是我们本能地想到并查集

并查集是通过递归的形式遍历整个图的一种算法,我们先让并查集先遍历以左儿子为树根的子树,再让并查集先遍历以右儿子为树根的子树,于是,我们有了这段并查集代码:

void find(char ch){
cout<<ch;
if(x[ch]!='*')find(x[ch]);
if(y[ch]!='*')find(y[ch]);
}

很显然,我用了\(\color{green}map\),\(\color{blue}x[ch]\)表示了一\(\color{blue}ch\)的左儿子,\(\color{blue}y[ch]\)表示了一\(\color{blue}ch\)的右儿子。

是不是很方便? \(\color{skyblue}map\)是个好东西!

有了\(\color{skyblue}map\),有了并查集,有了程序的框架,代码也自然浮出了水面。

#include <bits/stdc++.h>//以万能头文件开始了整个代码
using namespace std;
map<char,char>x;//用map来记录一个节点的左儿子
map<char,char>y;//用map来记录一个节点的右儿子
char a[35];//节点
void find(char ch){//并查集
cout<<ch;
if(x[ch]!='*')find(x[ch]);
if(y[ch]!='*')find(y[ch]);
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
char left,right;
cin>>a[i]>>left>>right;
x[a[i]]=left;
y[a[i]]=right;
}find(a[1]);//开始遍历整棵树
return 0;//结束程序
}

题解 P1305 【新二叉树】的更多相关文章

  1. 洛谷 P1305 新二叉树

    P1305 新二叉树 题目描述 输入一串完全二叉树,用遍历前序打出. 输入输出格式 输入格式: 第一行为二叉树的节点数n. 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输 ...

  2. 洛谷:P1087 FBI树 P1030 求先序排列 P1305 新二叉树

    至于为啥把这三个题放到一起,大概是因为洛谷的试炼场吧,三道树的水题,首先要理解 先序中序后序遍历方法. fbi树由于数量小,在递归每个区间时,暴力跑一遍区间里的数,看看是否有0和1.至于递归的方法,二 ...

  3. 洛谷 P1305 新二叉树 Label:字符串的输出总是有惊喜

    题目描述 输入一串完全二叉树,用遍历前序打出. 输入输出格式 输入格式: 第一行为二叉树的节点数n. 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输出格式: 前序排列的完 ...

  4. P1030 求先序排列 P1305 新二叉树

    题目描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度\le 8≤8). 输入输出格式 输入格式: 22行,均为大写字母组成的字符串,表示一棵二叉树的中序与 ...

  5. P1305 新二叉树 /// 二叉树的先序遍历

    题目大意: https://www.luogu.org/problemnew/show/P1305 由题目可知,输入首位为 子树的根 其后为其左右儿子 则除各行首位后的位置中 没有出现的那个字母肯定为 ...

  6. 洛谷——P1305 新二叉树(新建二叉树以及遍历)

    题目描述输入一串二叉树,用遍历前序打出. 输入输出格式输入格式: 第一行为二叉树的节点数n.(n \leq 26n≤26) 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输 ...

  7. p1305 新二叉树

    #include<cstdio> #include<iostream> #include<cstring> using namespace std; int n; ...

  8. 【LeetCode题解】94_二叉树的中序遍历

    目录 [LeetCode题解]94_二叉树的中序遍历 描述 方法一:递归 Java 代码 Python代码 方法二:非递归 Java 代码 Python 代码 [LeetCode题解]94_二叉树的中 ...

  9. 【LeetCode题解】144_二叉树的前序遍历

    目录 [LeetCode题解]144_二叉树的前序遍历 描述 方法一:递归 Java 代码 Python 代码 方法二:非递归(使用栈) Java 代码 Python 代码 [LeetCode题解]1 ...

随机推荐

  1. Pytorch随机种子

    最近在做比赛的时候,遇到了一个最好结果,但是之后无论怎样都复现不出来最好结果了.猜测是不是跟Pytorch中的随机种子有关. 训练过程 在训练过程中,若相同的数据数据集,相同的训练集.测试集划分方式, ...

  2. 单点登录CAS系列第06节之客户端配置单点登录

    原理 纯web.xml 借助Spring 注意 代码 测试 原理 这里用的是:cas-client-core-3.4.0.jar(2015-07-21发布的) 下载地址为:http://mvnrepo ...

  3. Golang: chan定义问题(7)

    通常都是定义读写双向的 chan,定义单向 chan 问题. 专栏的介绍可以参考 <GotchaGolang专栏>,代码可以看<宝库-Gotcha>. 通过 只写 chan 传 ...

  4. iPhone6爆炸真是小概率事件吗?

    前不久,央视新闻报道,根据上海市消费者权益保护委员会统计,2016年9月到11月,共接到8名消费者投诉,反映其苹果手机在正常使用或者正常充电的情况下突然爆炸.此外,苹果手机还被投诉存在自动关机等问题, ...

  5. Nginx 配置GeoIP2 禁止访问,并允许添加白名单过滤访问设置

    配置环境:Centos 7.6 + Tengine 2.3.2 GeoIP2 下载地址:https://dev.maxmind.com/geoip/geoip2/geolite2/ 1. Nginx  ...

  6. 达拉草201771010105《面向对象程序设计(java)》第十周学习总结

    达拉草201771010105<面向对象程序设计(java)>第十周学习总结 实验十  泛型程序设计技术 实验时间 2018-11-1 第一部分:理论知识        泛型:也称参数化类 ...

  7. 使用Taiko + Gauge进行自动化测试(一)

    目录 初识Taiko 环境安装 尝试Taiko taiko 执行过程 结合Gauge编写用例 使用Gauge 总结 初识Taiko 先来了解一下什么是Taiko:"Taiko是一个免费的开源 ...

  8. 曹工说Spring Boot源码(22)-- 你说我Spring Aop依赖AspectJ,我依赖它什么了

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  9. Newman+Jenkins实现接口自动化测试

    目录 一.是什么Newman 二.如何安装 三.如何使用 1.运行本地文件 2.运行在线文件 3.以node.js库运行 4.导出报告 四.命令行测试真实接口 1.导出collection文件 2.导 ...

  10. Lambda表达式(JDK8)

    在说Lambda表达式之前,先介绍一下函数式接口 函数式接口 就是只定义了一个抽象方法的接口,我们可以使用注解@Functionallnterface,来强约束这种接口为函数式接口.如Runnable ...