
数据结构->树&&单调队列&&单调栈
111111用户昵称不存在00000
这个作者很懒,什么都没留下…
展开
-
L2-011. 玩转二叉树
PATL2-011. 玩转二叉树 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。。 题解: 根据中序遍历(左中右),前序遍历(中左右); 由每次前序遍历区间的第一一个节点为跟节点,在中序遍历中找到这个节点即可将树的左子树和右子树区分,通过递归不断还原整棵树。原创 2017-02-28 20:17:58 · 651 阅读 · 0 评论 -
PATL3-010. 是否完全二叉搜索树
L3-010. 是否完全二叉搜索树 将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。 通过线段树的构建方法对所有点建二叉搜索树,则可在构建了一棵无键值节点均为0的完全二叉树。之后通过层次遍历判断这棵树在遍历完这n个节点的过程中是否出现为空的叶子节点判断是否是完全二叉搜索树。#include原创 2017-02-28 23:31:47 · 774 阅读 · 0 评论 -
PATL2-004. 这是二叉搜索树吗?
L2-004. 这是二叉搜索树吗? 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值; 其右子树中所有结点的键值大于等于该结点的键值; 其左右子树都是二叉搜索树。 所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。 给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索原创 2017-03-01 16:52:00 · 1058 阅读 · 0 评论 -
PATL2-007. 家庭房产-并查集
L2-007. 家庭房产 题目: 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。 输入格式: 输入第一行给出一个正整数N(<=1000),随后N行,每行按下列格式给出一个人的房产: 编号 父 母 k 孩子1 … 孩子k 房产套数 总面积 其中 编号 是每个人独有的一个4位数的编号;父 和 母 分别是该编号对应的这原创 2017-03-07 23:34:27 · 2716 阅读 · 0 评论 -
PATL2-010. 排座位-并查集
L2-010. 排座位 题目: 输入第一行给出3个正整数:N(<= 100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之间的关系,格式为:“宾客1 宾客2 关系”,其中“关系”为1表示是朋友,-1表示是死对头。注意两个人不可能既是朋友又是敌人。最后K行,每行给出一对需要查询的宾客编号。 这里假设朋友的朋友原创 2017-03-08 15:38:58 · 729 阅读 · 0 评论 -
PATL3-003. 社交集群-并查集
L3-003. 社交集群 题目: 在社交网络平台注册时,用户通常会输入自己的兴趣爱好,以便找到和自己兴趣相投的朋友。有部分兴趣相同的人们就形成了“社交集群”。现请你编写程序,找出所有的集群。 输入格式: 输入的第一行给出正整数N(<=1000),即社交网络中的用户总数(则用户从1到N编号)。随后N行,每行按下列格式列出每个人的兴趣爱好: Ki: hi[1] hi[2原创 2017-03-08 17:04:43 · 832 阅读 · 0 评论 -
PATL2-006.树的遍历
PATL2-006.树的遍历 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 题解: 根据中序遍历(左中右),后序遍历(左右中); 由每次后续遍历区间的最后一个节点为跟节点,在中序遍历中找到这个节点即可将树的左子树和右子树区分,通过递归不断还原整棵树。#include <stdio.h>#include <iostream>#原创 2017-02-28 20:10:03 · 1238 阅读 · 0 评论 -
UVALive6833->数据结构
UVALive6833->数据结构题意: 给出一个式子,只包含乘法和加法,判断这个式子按照从左向右的顺序计算和按照乘法优先的次序计算的结果是否为所需要的答案。题解; 顺序计算只需要从左向右依次处理即可,但是要按照运算符优先级计算时,需要先把中缀表达式转变成后缀表达式之后才能计算。代码:#include <stdio.h>#include <iostream>#include <str原创 2016-10-07 22:04:41 · 375 阅读 · 0 评论 -
POJ2796->单调栈
题意:给你一段区间,需要你求出(在这段区间之类的最小值*这段区间所有元素之和)的最大值题解:实际上这个题目就是要对每一个节点进行扩展,这样扩展的话,复杂度是O(n^2)。减少时间复杂度要用单调栈,单调栈处理的问题就是对每一个节点进行扩展的问题,这个题目要维护的是一个单调递减栈,即从栈顶元素到栈底元素,值是单调递减的,即栈顶元素的值始终是栈的最大值。然后每一个值有属于自己的区间,这个区间目的是为原创 2016-07-24 13:33:54 · 536 阅读 · 0 评论 -
HDU1506->单调栈
题意:求连续区间内矩形覆盖的最大面积,连续区间内矩形宽度都为1 , 高度只能取最小高度题解:维护一个单调递减的单调栈对于一个新的元素:(1)如果此时栈为空或者栈顶元素比新元素小,则将该元素入栈;(2)如果栈顶元素与新元素相等,则跳过新元素;(3)如果栈顶元素比新元素大,那么此时需要更新栈顶元素并更新面积,一直到栈顶元素小于新元素为止。#include#include原创 2016-07-24 19:58:44 · 353 阅读 · 0 评论 -
POJ1611->并查集
题意:求包含0元素的集合的元素个数题解:基础并查集#include #include using namespace std ;#define MAX 30005int parent[MAX] ;int rank[MAX] ;int num[MAX] ;void make_set(int x){ parent[x] = x ; rank[x] = 0 ; num[x]原创 2016-07-25 16:59:20 · 281 阅读 · 0 评论 -
POJ2524->并查集
题意:给出一些在一个集合的元素信息,求一共有多少个无交集的集合题解:并查集,初始集合个数为人数,在合并集合的过程中,每次在一个集合里合并了一个人,集合个数就减一#include #include using namespace std ;#define MAX 50005int parent[MAX] ;int rank[MAX] ;int num[MAX] ;int cnt原创 2016-07-25 17:30:37 · 895 阅读 · 0 评论 -
POJ1988->并查集
题意:有几个stack,初始里面有一个cube。支持两种操作:1.move x y: 将x所在的stack移动到y所在stack的顶部。2.count x:数在x所在stack中,在x之下的cube的个数题解:构建并查集,在合并和查找集合的过程中更新数量#include #include #include using namespace std ;#define MAX 30005原创 2016-07-26 17:55:21 · 340 阅读 · 0 评论 -
Trie树介绍与动态构造->HDU1251
Trie树介绍:Trie树,称为单词前缀树,字典树,是一种用于快速检索的多叉树结构核心思想: 空间换时间,利用字符串的公共前缀来最大限度地减少无所谓的字符串比较,从而降低时间复杂度。基本性质: 1.根节点不包含字符,除根节点外的每条边对应一个字符 2.从根节点到某一个节点,将边上的字符连起来,会得到该节点对应的前缀 3.每个节点对应的前缀都不相同Trie树的编程实现1原创 2016-07-29 16:19:53 · 327 阅读 · 0 评论