数据结构
文章平均质量分 50
分享关于数据结构的知识
MangataTS
一个爱折腾的Coder
展开
-
L2-016 愿天下有情人都是失散多年的兄妹(DFS)
题目链接https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216思路我们把这个家族关系看成一颗二叉树,树的根节点是子元素,“左儿子” 是父亲,“右儿子” 是母亲,然后我们定义 isman[i]isman[i]isman[i] 如果为 true 表示编号为id 的性别为男,反之为女,然后我们每次输入一行数据就连边,起点是当前编号,终点是父母编号(存在的话),然后我们在Q 次询问的时候,首先判断两个编号是否为原创 2022-04-05 00:04:16 · 1096 阅读 · 0 评论 -
L2-011 玩转二叉树(建树+BFS)
题目链接https://pintia.cn/problem-sets/994805046380707840/problems/994805065406070784思路由于给出了中根遍历以及先根遍历,我们先通过先根遍历定位到树的根节点,然后再通过中根遍历划分二叉树,然后再不断地往左往右递归处理左右子树,最后建立完这颗二叉树后,我们再在BFS 的时候优先把右子树放入队列,这样就能达到镜像反转的层序遍历,详情请看代码代码#include<bits/stdc++.h>using namesp原创 2022-04-03 14:35:27 · 1187 阅读 · 0 评论 -
L2-012 关于堆的判断(模拟堆+字符串处理)
题目链接https://pintia.cn/problem-sets/994805046380707840/problems/994805064676261888思路我们首先通过模拟实现堆(这里只需要实现堆的插入即可),然后对于四种情况:x是根结点,我们只需要判断堆中第一个元素是否为x即可x是y的父结点,我们只需要判断y>>1y>>1y>>1 是否等于 xxx 因为根节点是从1开始的,下面同理x是y的一个子结点,我们只需要判断x>>1x>&原创 2022-03-29 20:12:57 · 1347 阅读 · 1 评论 -
L2-006 树的遍历(建树)
题目连接https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456思路我们只需要西安通过后根遍历和中根遍历进行建树,然后再BFS即可,这里由于点很少(其实是数据水)所以不用指针或者链式前向星,直接莽过去,但是正解应该是直接在递归的过程中就求出层序遍历,或者说是通过指针或者链式前向星建图代码暴力建树#include<bits/stdc++.h>using namespace std;#d原创 2022-03-24 20:17:51 · 854 阅读 · 0 评论 -
L2-004 这是二叉搜索树吗?(二叉树)
题目连接https://pintia.cn/problem-sets/994805046380707840/problems/994805070971912192思路这道题我们要从二叉搜索树的特性出发,其实也就是题目中提到的:其左子树中所有结点的键值小于该结点的键值其右子树中所有结点的键值大于等于该结点的键值其左右子树都是二叉搜索树又因为这颗二叉树可能镜像翻转,于是我们需要判断镜像和非镜像是否为二叉搜索树,也就是至多两次判断,其实两次都是几乎一样的,因为左子树的所有节点的最大值是小于右子树原创 2022-03-24 16:36:45 · 4810 阅读 · 6 评论 -
AcWing 1738. 蹄球(特殊基环树)
题目链接https://www.acwing.com/problem/content/description/1740/思路经过分析我们发现,对于每一个点来说,我们有至多两个入度以及必定有一个出度,那么这个图最终一定会构成一个基环图,而且是特殊的基环图,对于这个特殊的基环图,我们细分下来其实只有两种,一种是仅由两个点构成的环,并且没有其他入度,那么对于这个环图,我们只需要给其中的一个牛牛踢球就好了,如果是环上还由其他的入度,说明这个环挂了一个树,那么对于这样一个树,我们至少需要这棵树的所有叶子节点的元原创 2022-02-23 11:43:09 · 624 阅读 · 0 评论 -
POJ2104 K-th Number (平方分割 + 二分)
题目链接:传送门题意:输入n个数,然后进行m次操作,每次操作输入三个数l,r,k,输出在[l,r]区间第k小的数解题思路:这道题做法倒是挺多的,平方分割可以做,归并树,划分树,主席树都能做,但是本片博客主要讲解一下平方分割的做法(比较简单),我们把n个数分为n/1000个桶,然后我们维护每个桶即可,我们通过预处理把每个桶的元素进行排序处理,然后我们二分查找第k小的数字,在[l,r]这个区...原创 2021-01-20 19:27:00 · 205 阅读 · 1 评论