3.15总结

news/2025/3/16 18:05:29/文章来源:https://www.cnblogs.com/OIer-QAQ/p/18775353

P1305 新二叉树

首先介绍一下何为先序遍历:
在二叉树中,对于每一对父亲与左右儿子,都按照{父亲,左儿子,右儿子}的顺序来遍历
例如有这样一棵树:image
先序遍历的顺序:

遍历1,输出“1”
遍历1的左儿子3,输出“3”

遍历3的左儿子5,输出“5”
5没有左右儿子,返回3
遍历3的右儿子2,输出“2”
2没有左右儿子,返回3
3的左右儿子都遍历了,返回1

遍历1的右儿子4,输出“4”
4没有左右儿子,返回1
1的左右儿子都遍历了,结束

所以这棵树的先序遍历是:1,3,5,2,4

那么代码也很简单了(伪代码):

点击查看代码
void dfs(int x){if(x==leafnode){//叶子结点return;/不跑了}cout<<x<<' ';//输出dfs(leftson[x]);//左儿子dfs(rightson[x]);//右儿子
}

而此题只需要先将字母转为ASCI码,输出时在转为字母即可
我的代码中没有记录左右儿子,将vector的存贮顺序定为先左后右:

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
const int maxn=1e6+5,mod=1e9+7,inf=1e18;
int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0' && ch<='9')x=x*10+ch-'0',ch=getchar();return x*f;}
void write(int x){if(x<0){putchar('-'),x=-x;}if(x>9){write(x/10);}putchar(x%10+'0');return;}
int fpow(int a,int b,int p){if(b==0){return 1;}int res=fpow(a,b/2,p)%p;if(b%2==1){return((res*res)%p*a)%p;}else{return(res*res)%p;}}
int n;
int root;
vector<int>vt[maxn];
void dfs(int x){cout<<char(x);for(int v:vt[x]){dfs(v);}
}
signed main(){cin>>n;for(int i=1;i<=n;i++){char r,u,v;cin>>r>>u>>v;if(i==1){root=signed(r);}if(u!='*'){vt[signed(r)].push_back(u);}if(v!='*'){vt[signed(r)].push_back(v);}}dfs(root);return 0;
}

P1030 [NOIP 2001 普及组] 求先序排列

中序遍历与后序遍历是一样的,只是中序遍历的顺序是{左儿子,父亲,右儿子},后序遍历是{左儿子,右儿子,父亲}
写出上面的图的前中后序遍历:

先序:1,3,5,2,4
中序:5,3,2,1,4
后序:5,2,3,4,1

可以发现一个规律,先序的第一个与后序的最后一个都是根,而中序的根左边右边分别是左右子树的中序遍历

那么这一题就用后序遍历不断求根,在中序中找到根,分出左右子树,在递归即可
样例分析:

BADC
BDCA

后序遍历求根:A,输出
中序遍历中找到A在2的位置,得A左子树为B,右子树为DC
后序遍历的左子树是一样的从1到2-1的位置,即B,而右子树则是2+1~长度-1的位置,即DC
遍历左子树B,后序遍历求根:B,输出
中序遍历空了,返回
遍历右子树DC,得到根:C,输出
中序遍历中找到C在2的位置,得C左子树为D
后序遍历的左子树是一样的从1到2-1的位置,即D
遍历左子树D,得到根:D,输出
中序遍历空了,返回
C无右子树,返回
结束

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define endl "\n"
using namespace std;
const int maxn=1e6+5,mod=1e9+7,inf=1e18;
int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0' && ch<='9')x=x*10+ch-'0',ch=getchar();return x*f;}
void write(int x){if(x<0){putchar('-'),x=-x;}if(x>9){write(x/10);}putchar(x%10+'0');return;}
int fpow(int a,int b,int p){if(b==0){return 1;}int res=fpow(a,b/2,p)%p;if(b%2==1){return((res*res)%p*a)%p;}else{return(res*res)%p;}}
string a,b;
void dfs(string zhong,string hou){if(zhong.size()==0){return;}char root=hou[hou.size()-1];//求根int pos=zhong.find(root);cout<<root;dfs(zhong.substr(0,pos),hou.substr(0,pos));//左子树dfs(zhong.substr(pos+1),hou.substr(pos,hou.size()-pos-1));//右子树
}
signed main(){cin>>a>>b;dfs(a,b);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/899884.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot配置文件的使用

一.全局文件配置 Spring Boot 使用全局配置文件来允许开发者自定义应用程序的配置。这些配置文件可以用来修改自动配置的设置,或者添加新的配置项。 配置文件的位置和命名:application.properties 或 application.yml:默认情况下,Spring Boot 会在以下位置查找配置文件,并…

SpringBoot配置

一.全局文件配置 Spring Boot 使用全局配置文件来允许开发者自定义应用程序的配置。这些配置文件可以用来修改自动配置的设置,或者添加新的配置项。 配置文件的位置和命名:application.properties 或 application.yml:默认情况下,Spring Boot 会在以下位置查找配置文件,并…

[vue]实现一个天气预报页面

Vue学习笔记之用Vue3+ element plus + axios实现一个天气预报页面前言 使用vue3 + element plus + axios。效果:步骤创建项目并安装依赖npm create vue@latestcd vue3-demo1 npm install npm run devnpm install --save axios vue-axios npm install element-plus --savemain.…

【启程】CSP2024 游记

前言 upd:——希君生羽翼,化北溟鱼,度春风。 初赛前一天晚上开坑,回忆一下去年J组的经历。 回忆幸运的第一轮 初赛是什么?做了一套22年的卷子,连蒙带猜差不多70pts?考场直接瞎写,一半左右都是蒙的,判断去全选对,完善程序全蒙,最后9个判断7个A,30pts的完型蒙到了15p…

[Webpack] 打包优化 二

optimization optimization这个配置项内部的很多优化策略都是在生产环境默认开启的,启用这些规则从一定程序上来讲可以显著减少 bundle 体积,优化代码生成,帮助长期缓存等。 optimization.minimize optimization.minimize指定 webpack 默认使用 terser-webpack-plugin 来压缩…

坐标转换软件 | CGCS2000 经纬度坐标 与 高斯克吕格3度投影平面坐标的互相转换

软件下载地址: 链接: https://pan.baidu.com/s/1ySwut1CpFLTSkGTVy792Fw?pwd=dyzj 提取码: dyzj 关于软件软件介绍:Fast坐标转换软件 是一款专为地理信息系统(GIS)和测绘领域设计的实用工具,旨在实现CGCS2000经纬度(地理坐标)与高斯-克吕格3度投影平面坐标之间的快速、精确转…

可持久化线段树(主席树)学习笔记

可持久化线段树(主席树)学习笔记主席树求解的问题一般是区间历史求值的问题,即对一些点进行操作后,求其中一个版本的答案 最朴素的方法就是每一次操作都将原线段树复制一遍,但是这样很费空间,而且产生了大量无用的点 但是可以发现,每次修改时所走的路径其实只经过了根到对…

FBI树

FBI树 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。 FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2N的“01”串S可以构造出一棵FBI树T,递归的构造方法如…

学嵌入式C语言,看这一篇就够了(4)

C语言的输入输出 C语言标准在发布的同时,ANSI组织同时也一起发布了和C语言相关的函数库,也就是标准C库,标准C库集成了很多的API函数接口,比如常用的输入和输出函数就是标准C库提供的 用户如果打算使用标准C库的函数,就必须要包含函数库对应的头文件,比如输入输出函数对应…

数字三角形最大路径和

1 #include <iostream>2 #include <vector>3 #include <algorithm>4 using namespace std;5 6 // 自顶向下的方式7 pair<int, vector<int>> maximumTotal(vector<vector<int>>& triangle) {8 int n = triangle.size();9 …

查询实战

统计员工性别并返回数据: select if(gender=1,man,women) 性别,count(*) from tb_emp group by gender;统计员工职位并返回数据: selectcase job when 1 then 班主任when 2 then 讲师when 3 then 学工主管when 4 then 教研主管else 未分配 end 职位,count(*) from tb_emp group…

grpc使用postman测试-问题集合

问题1:postman中proto文件import问题 Unresolved "import" directives We could not find some of the files imported by the .proto file. Specify import paths to those unresolved files using the options below.解决方法: 项目结构如下 - code |- pbentity…