
树形数据结构
文章平均质量分 57
二叉树、多叉树、二叉搜索树、红黑树、字典树
你别教我打游戏
直面困难,重视过程,追求结果,淡忘过去。
展开
-
HDU In case of failure 2996 (KD树入门题)
hdu2996地址题目意思很简洁:有多个测试样例,每组样例给出n个的二维平面上的点,然后问你对于每个点而言,距离它最近的点的距离是多少。要是一个一个算距离的话,那肯定是是超时的。而这道题目就是利用KD树快速搜索最近邻点的。我对KD树的理解如下本质上是一种暴力+剪枝;下面是KD树最灵魂的一行代码: // 最核心的一行代码if(minDistance >toSurface*toSurface) solve(toLefttreeNode.right:treeNo原创 2021-03-01 15:06:43 · 121 阅读 · 1 评论 -
平衡搜索树(Binary Search Tree BST)、索引二叉搜索树
//// Created by SongyangJi on 2020/12/23.//#ifndef DATASTRUCTURE_BINARYSEARCHTREE_H#define DATASTRUCTURE_BINARYSEARCHTREE_H#include<iostream>using std::ostream;using std::endl;using std::cout;template<class K, class V>class Binar原创 2021-01-06 22:51:46 · 181 阅读 · 1 评论 -
二叉树的各种遍历(递归与迭代实现)以及使用中序、(前序 | 后序)还原二叉树
这里就用力扣上面的各种题目要模板了。二叉树的遍历层次遍历102. 二叉树的层序遍历class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> ans; if(!root) return ans; queue<TreeNode*> q; q..原创 2020-10-21 21:42:07 · 168 阅读 · 0 评论 -
AVL搜索树
依次插入:20 10 5 30 40 3 4 25 23 27 50//// Created by SongyangJi on 2020/11/16.///** * * 这个例子仅仅演示了AVL的基本操作,没有用泛型,只有键,没有值, * 并且假定所有数据都不相同。 * */#include <algorithm>using namespace std;#include <queue>#include <iostream>usi原创 2021-01-06 20:46:13 · 179 阅读 · 1 评论 -
AcWing 240. 食物链 (边带权并查集、同余)
240. 食物链建模巧妙的建模,由于题目中只有三种动物,并且这三种动物的食物链构成了一个环,而这种环和取模后循环有着密切的关系。具体的:将所有的动物合并到一个并查集里,现在有两个点x,yx,yx,yd[x]−d[y]≡0(mod 3)d[x]- d[y]\equiv 0(mod\ \ 3)d[x]−d[y]≡0(mod 3),说明,xxx和yyy是同类。d[x]−d[y]≡1(mod 3)d[x]- d[y]\equiv 1原创 2020-09-24 20:34:02 · 133 阅读 · 0 评论 -
并查集的路径压缩和按秩合并
并查集的路径压缩合并#include<stdio.h>using namespace std;int n,m;struct UF{ int f[100100]; UF(int n){ for(int i=0;i<=n;i++) f[i] = i; } int find(int x){ return x==f[x]?x:f[x]=find(f[x]); } void merge(.原创 2020-09-24 18:57:26 · 240 阅读 · 0 评论 -
数据结构之链表、邻接表
写在前面的话:本菜鸟还是个c++的初学者(上手的是Java),数据结构还没有正式开始学,这些只是我平时闲着无聊自学一些新东西。有高手愿意指出错误,就很感激了。估计没有了,代码写的贼乱,自己都不想看。链表动态分配内存、指针实现。#include<iostream>#include<string>#include<vector>using name...原创 2020-04-21 20:53:54 · 617 阅读 · 0 评论 -
字典树(前缀树、Trie)概念介绍、静态实现、动态实现
字典树:又称前缀树,Trie树,是一种树形结构。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串)。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较。它的最基本的操作是插入一个字符串,和查询。存储结构:const int maxnode = maxn*maxlen; //字符串个数*字符串的长度int trie[maxnode][size],t...原创 2020-03-05 22:26:28 · 565 阅读 · 0 评论 -
POJ - 3764The xor-longest Path——异或运算+Trie+树的DFS遍历
The xor-longest Path大方面的思路:①挑取树的任一节点作为根节点,计算出从其它所有节点 x 到根节点的距离,记为 d[x]。②那么题目中求的 x到y路径上的所有权值异或起来的结果就是 d[x] xor d[y]d[x] \ xor\ d[y]d[x] xor d[y]为什么呢?首先,异或运算的一条性质,a xor&nb...原创 2020-03-05 21:59:56 · 1659 阅读 · 0 评论 -
01 Trie (基本概念、经典例题)
The XOR Largest Pair01Trie的典型例题两数字异或运算求最值:思路:将数字理解为一个长度为32的01串,异或运算求最值,应该贪心地从最高位到最低位取不同的数字。步骤:将所有数字插入Trie,然后遍历n个数字,对于每个数字从高位到低位, 依次匹配与它不同的数字(没有就匹配相同的)。注意这样贪心是合理的,因为高位的数字影响大于低位数字影响总和。譬如:0x1000...原创 2020-03-05 18:59:43 · 1528 阅读 · 0 评论 -
Trie入门题HDU - 1671-Phone List)——(前缀统计)
Phone List Description:给定n个字符串,问当中是否有字符串是其他字符串的前缀。思路1:对于每个字符串,判断它的每一个字符(除去最后一个字符)是否是其他字符串的结尾。思路2;对于每个子串的结尾,判断它是否是其他字符串的中间字符。思路1:#include<stdio.h>#include<iostream>#include<cma...原创 2020-03-05 11:13:19 · 218 阅读 · 0 评论 -
POJ - 2352Stars———线段树+二维偏序
Description:天文学家经常研究星图,星图上的星星由平面上的点表示,每颗星星都有笛卡尔坐标。一颗星星的等级是指该星星左方至下方范围内的星星的数量.例如,查看上图所示的地图,5号星的等级为3(左方至下方范围内有1、2、4号星),2号星和4号星的等级为1。在这张地图上有一颗0级的星星,两颗1级的星星,一颗2级的星星,和一颗3级的星星。 你需要写一个程序来计算给定星图上每个等级的星星数量。...原创 2020-03-03 13:52:17 · 344 阅读 · 0 评论 -
并查集入门题——UVALive-3644化合爆炸物+UVALive-3027
X-Plosives是数据增强过了吗,还是评测系统出了问题,已AC的代码现在还WA思路:每种化学元素就是一个点,每种化合物就是一个边,产生爆炸物的情况就是图中产生了一个环。用并查集,来维护图中的连通分量。#include<stdio.h>#include<iostream>#include<cmath>#include<math.h>...原创 2020-03-02 20:32:53 · 227 阅读 · 0 评论 -
模拟+栈+队列+优先队列UVA-11995
I Can Guess the Data Structure!注意点:如果ADT已经为空了,确仍然返回了一个“正常值”,说明三者都不可能。#include<stdio.h>#include<iostream>#include<cmath>#include<math.h>#include<string>#include<...原创 2020-03-02 17:38:00 · 161 阅读 · 1 评论 -
多路归并问题+优先队列——UVALive-3135
Argus Description:多个有序表合并成一个有序表‘譬如:表1 : 1 3 5 7 9 11 13表2:4 8 12 16合并:1 3 4 5 7 8 9 11 12 13 16思路:用优先队列维护每个表的当前元素,当前元素处理完,将这个元素的的下一个元素推进队列。#include<stdio.h>#include<iostream>#inc...原创 2020-03-02 14:30:38 · 292 阅读 · 0 评论 -
数组的第k个v的下标+map的使用+UVA-11991
Easy Problem from Rujia Liu?用空间换时间的最极端的做法就是用data[k][v]时间复杂度O(1),空间复杂度O(k*v),无法承受。用map<int,vector<int>> kv;map的查询,赋值耗时都是O(log),vector<>是O(1),时间复杂度(logn),总时间复杂度为O((n+m)*logn)#includ...原创 2020-03-02 13:35:01 · 216 阅读 · 0 评论 -
线段树模板
线段树模板单点更新+区间查询#include<iostream>#include<stdio.h>#include<math.h>#include<string>#include<string.h>#include<algorithm>#define ll long long#define l(p) t[p...原创 2020-02-04 21:34:50 · 226 阅读 · 0 评论