数据结构
文章平均质量分 54
Echo_ac
不知未来怎样,现在一定全力以赴
展开
-
L2-3 完全二叉树的层序遍历 (25 分)——递归还原二叉树
题目链接思路我自己的思路是:后序遍历的顺序是,左右根,因为是完全二叉树,所以我可以确定左右子树的结点个数,就由此递归建树。我这样写稍微麻烦点。还有一种做法就是,完全二叉树的后序遍历,是左右根的顺序遍历,我们可以左右根的去递归输入,这样得到的顺序就是层序遍历的结果AC代码1#include<bits/stdc++.h>#define rep(i,x,y) for(int i=x; i<=y; ++i)#define per(i,x,y) for(int i=x; i>原创 2022-04-20 19:49:04 · 979 阅读 · 0 评论 -
[CF522D]Closest Equals——线段树+离线技巧+思维
题目传送门思路应该能想到我们需要求出每一个 aia_iai 上一次出现的位置 pre[i]pre[i]pre[i] , 对于每一个询问区间 [l,r][l,r][l,r] 我们需要求出 i−pre[i]i-pre[i]i−pre[i] 的最小值 (pre[i]≥l)(pre[i] \geq l)(pre[i]≥l)。线段树维护最小值即可问题1:我们可以将每个 pre[i]pre[i]pre[i] 位置的值换成 i−pre[i]i-pre[i]i−pre[i] ,但是每次在线暴力置换一原创 2022-03-10 10:42:08 · 184 阅读 · 0 评论 -
根据层序遍历和中序遍历确定二叉树,输出先序遍历
思路二叉树的键值一定要唯一,不然无法确定一颗二叉树。给出层序遍历和中序遍历确定一颗二叉树,类似与给出先序遍历和中序遍历确定一颗二叉树的做法类似。采用递归建树求解,我们先确定当前层序遍历区间的第一个结点,那么这个点就是当前区间中序遍历的根结点。找到这个点在中序遍历区间的位置,那么左边就是左子树区间,右边就是右子树区间。对于左子树区间,我们与当前层序遍历区间的值比较,提取出 leftleftleft, 表示左子树的层序遍历结果,继续递归。右子树区间同理例如下图的一颗二叉树,对于当前区间,根节点为B原创 2022-03-04 10:44:21 · 2490 阅读 · 0 评论 -
L3-011 直捣黄龙 (30 分)——25分,测试点2错误分析
题目链接思路思路不难,就是最短路+多条件判断,这里说一下很多人只得了25分的原因,就是测试点2wa的情况:大概率是更新最短路径写错了,我这里使用road数组记录的,注意如果在更新最短距离时更新路径条数,应该是 road[j]=road[u]road[j]=road[u]road[j]=road[u]更新两外两种情况时更新路径条数,应该是 road[j]+=road[u]road[j]+=road[u]road[j]+=road[u]AC代码#include<bits/stdc++.h&原创 2022-01-22 15:01:17 · 711 阅读 · 0 评论 -
L2-012 关于堆的判断 (25 分)
题目链接思路小根堆的建立+字符串处理,真的好爱考字符串呀。。。代码#include<bits/stdc++.h>using namespace std;const int N = 1e3+9;int a[N];unordered_map<int,int> pos;//堆化 void build(int n){ int t=n; while(t/2>=1 && a[t/2]>a[t]){ swap(a[t/2],a[t]);原创 2021-12-15 15:22:40 · 1159 阅读 · 0 评论 -
哈夫曼编码译码java实现
正对只含有数字,字母的字符串。若有其他字符改动一下即可。一下代码由本人手写,先写了c++再写的java(不怎么熟练java)有错欢迎交流。本人使用工具idea, jdk版本为11转载请注明出处。c++版文章目录Main.classqueueNode.classhuffManNode.classhuffManCode.class目录结构Main.classimport java.util.Comparator;import java.util.PriorityQueue;import java原创 2021-10-05 21:14:37 · 580 阅读 · 0 评论 -
哈夫曼编码和译码c++数组实现
做软工项目,组长说要把url地址加密,于是想到了哈夫曼编码。c++写了个初始模板,后续改改。本代码针对是是只包含字母和数字的字符串的编码和译码,可以改动一下变成通用。#include<bits/stdc++.h>using namespace std;const int N = 1e5+9;struct node{ int w;//结点权值 int p,lson,rson;//双亲,左孩子,右孩子下标 }Ht[N]; struct code{ char ch; s原创 2021-10-05 13:25:48 · 352 阅读 · 0 评论 -
L2-004 这是二叉搜索树吗? (25 分)——思路不懂得看这里
题目链接文章目录说明思路AC代码说明思路参考大佬博客,其实最后还是学姐把我讲懂的思路首先,我们解释下镜像二叉搜索树。其实即使更改了二叉搜索树得定义:左子树得所有节点值大于等于根节点得值,右子树的所有节点值小于根节点值,左右子树也是二叉搜索树。如图所示好了,其实根据二叉搜索树的前序及其定义以及可以确定树的形状了,如图所示现在要求后序遍历,我们可以根据前序遍历,进行划分左右子树,然后递归左右根的进行保存根节点,这样就得到了后序遍历。代码注释有详解AC代码#include<bi原创 2021-03-31 09:57:30 · 918 阅读 · 2 评论 -
L2-035 完全二叉树的层序遍历 (25 分)——完全二叉树的性质
题目链接题解这道题给定完全二叉树的后序遍历,求层序遍历完全二叉树采用顺序存储,输入的时候后序遍历输入,即可获得整棵完全二叉树的结构,最后顺序输出即可同理给定完全二叉树的先序,中序遍历也可以求出整棵完全二叉树的结构如果不是完全二叉树或者满二叉树则不一定能确定唯一的树的结构AC代码#include<bits/stdc++.h>using namespace std;#define mem(a,b) memset(a,b,sizeof a)#define PII pair<i原创 2021-03-14 20:22:52 · 445 阅读 · 0 评论