数据结构-树
文章平均质量分 74
Apollo-yyy
考研失败的华子5G工程师一枚
展开
-
1043 Is It a Binary Search Tree
题目大意:给出二叉查找树的节点输入序列,判断这个序列是否为二叉查找树或者镜像(交换左右子节点位置)二叉查找树的先序序列,如果是,输出后序遍历序列。解题思路:按照题目要求构建二叉查找树然后先序遍历得到结果对比即可,为了方便比较两个序列采用vector方便一些,关于镜像二叉查找树只需要写遍历的时候将左右反过来即可。代码如下:#include<iostream>#include...原创 2019-02-14 16:52:17 · 185 阅读 · 0 评论 -
1127 ZigZagging on a Tree
题目大意:给定二叉树的中序和后序遍历,输出“层次”遍历,这个层次遍历从根节点的子节点开始,先从左到右输出,然后从右到左输出。。。循环往复。解题思路:这个题我写的复杂了一点,关于输出哪里我用了两个双端队列模拟了输出的扩展情况,即从左到右和从右到左,所以代码较难理解。维护一个度参数根据奇偶度判断是从右到左还是从左到右输出会方便很多。代码如下:#include<iostream>...原创 2019-02-24 11:28:36 · 289 阅读 · 0 评论 -
1155 Heap Paths
题目大意:判断一个完全二叉树是不是堆,是最大堆还是最小堆,并且从右到左输出它的每一条路径。解题思路:DFS遍历+数组记录路径即可。代码如下:#include<iostream>#include<cstdio>#include<vector>#include<algorithm>using namespace std;int n,...原创 2019-02-24 11:38:11 · 287 阅读 · 0 评论 -
1090 Highest Price in Supply Chain
题目大意:给出树节点的数量,货物价格P,转手一次提高的比率r(就是从父节点到子节点,价格要在原来的基础上上涨r%),然后依次给出n的父节点编号,每个节点编号是第i个节点的父节点,如果是-1说明当前节点是树的总根节点。解题思路:很简单的DFS遍历树,递归计算当前节点价格就好,递归边界是当前节点是叶子节点,然后更新最大价格和供应链数量即可。代码如下:#include&lt;iostream...原创 2019-02-13 18:40:00 · 249 阅读 · 0 评论 -
1094 The Largest Generation
题目大意:给出一个族谱,找出人数最多的一代,输出这代人的人数和代数编号。老祖宗代数编号为1,。解题思路:BFS遍历树赋值代数编号即可,当然DFS也可以,但是为了方便统计每一代人的人数还是用层次遍历更直观一些。代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<s...原创 2019-02-13 18:44:48 · 220 阅读 · 0 评论 -
1079 Total Sales of Supply Chain
题目大意:给出一棵销售供应的树,树根唯一。在树根处货物的价格为P,然后从根节点开始每往子节点走一层,该层货物价格将会在父亲节点的价格上增加r%。给出每个叶节点的货物量,求他们的价格之和。解题思路:DFS搜索即可,太简单了,实在不知道该啰嗦啥。代码如下:#include<iostream>#include<cstdio>#include<fstream&...原创 2019-02-13 22:00:37 · 427 阅读 · 0 评论 -
1106 Lowest Price in Supply Chain
题目大意:给出一棵销售供应的树,树根唯一。在树根处货物的价格为P,然后从根节点开始每往子节点走一层,该层货物价格将会在父亲节点的价格上增加r%。找出总价格最便宜的供应链并统计这样的链有多少条。解题思路:DFS,代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<s...原创 2019-02-13 22:05:55 · 194 阅读 · 0 评论 -
1147 Heaps
题目大意:判断一个完全二叉树是最大堆还是最小堆还是不是堆,然后输出后序遍历的结果。解题思路:根据最大最小堆的定义一次判断父节点和子节点的关系并记录,如果记录出现冲突说明不是一个堆,否则就输出记录的结果,最后输出后序遍历。代码如下:#include&lt;iostream&gt;#include&lt;cstdio&gt;#include&lt;fstream&gt;#inclu原创 2019-02-20 11:02:00 · 281 阅读 · 0 评论 -
1115 Counting Nodes in a BST
题目大意:数一个BST(二叉查找树)最后两层节点的数量。解题思路:维护一个深度参数,建树时记录下最大深度然后BFS遍历统计即可。代码如下:#include<iostream>#include<algorithm>#include<cstdio>#include<queue>using namespace std;int n,ma...原创 2019-02-25 22:34:55 · 287 阅读 · 0 评论 -
1053 Path of Equal Weight
题目大意:给一棵结点数为n,非叶结点数为m的树,然后给一个权值s。接下来给出n个结点的权值(顺序就是结点ID编号),依次给出m个父节点的子节点编号,要求按照从大到小的顺序(按字典序理解)输出路径权值和为s的路径结点。解题思路:这个题用DFS或者记忆化DP都可以写,这里给出DFS的方法,用一个vectot保存路径,关于输出字典序有个小技巧,就是在给父节点输入子节点的时候,可以按照权值大小排序...原创 2019-02-13 10:56:04 · 177 阅读 · 0 评论 -
1102 Invert a Binary Tree
题目大意:n个节点,依次给出每个节点的左右孩子节点下标,如果没有孩子用‘-’代替,要求从右到左输出层次遍历序列,然后输出翻转二叉树后的中序遍历。解题思路:使用静态链表构建二叉树,标记每一个孩子节点从而找出总的根节点,然后BFS输出层次遍历。中序遍历可以提前交换节点并保存在节点结构体中,正常输出中序遍历即可。代码如下:#include<iostream>#include&l...原创 2019-02-12 17:42:13 · 266 阅读 · 0 评论 -
1086 Tree Traversals Again
题目大意:用栈的输出表示二叉树的中序遍历,要求输出二叉树的后序遍历序列。解题思路:题目隐含了入栈的顺序就是先序遍历的序列,根据这个构建出二叉树然后后序输出即可。代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<set>#include<cmath...原创 2019-02-12 16:55:12 · 441 阅读 · 0 评论 -
1064 Complete Binary Search Tree
题目大意:给你n个数,这n个数可以唯一的构成一个完全二叉查找树,输出这个树的层次遍历序列。解题思路:完全二叉树的节点下标是有对应关系的,假如根节点下标为x,那么左儿子下标就是2x,右儿子就是2x+1。根据这个关系和题目中限制的结点数n可以构建一棵,根编号为1(当然0也可以)节点数为n的完全二叉树,然后得到这个二叉树的中序遍历编号序列。由于二叉查找树的中序遍历序列永远是一个从小到大的递增序列...原创 2019-02-14 17:01:59 · 180 阅读 · 0 评论 -
1099 Build A Binary Search Tree
题目大意:输入一棵二叉查找树和n个数据,把这n个数据放入这颗树中,输出层次遍历序列。解题思路:按照二叉查找树中序遍历的特点(数据从小到大)得到二叉树的中序编号序列并把数据排序后对应插入到节点相应的下标,然后BFS输出层次遍历序列结果。代码如下:#include<iostream>#include<cstdio>#include<fstream>...原创 2019-02-14 17:09:31 · 389 阅读 · 0 评论 -
看懂二叉树的三种遍历
转载自https://blog.csdn.net/soundwave_/article/details/53120766二叉树有三种遍历方式,前序遍历(preorder traversal ),中序遍历(inorder traversal ),后序遍历(postorder traversal )。下面给出详细的解释: 1.先(根)序遍历的递归算法定义: 若二叉树非空,则依次执行如下...转载 2018-04-18 20:16:30 · 3291 阅读 · 4 评论 -
1107 Social Clusters
题目大意:n个人,每个人都有k个兴趣,后面是兴趣种类的编号。有相同兴趣的两个人放到一个组里,两两组之间的人没有任何相同的兴趣,要求输出兴趣组数并按照非递增顺序输出兴趣小组的人数。解题思路:并查集的模板题,通过判断两个兴趣集合是否有交集判断这两个人是否属于同一组,开一个数组记录每棵树下的节点数量,在合并子节点时修改对应树的节点数量。代码如下:#include&lt;iostream&gt...原创 2019-02-14 22:07:22 · 367 阅读 · 0 评论 -
1098 Insertion or Heap Sort
题目大意:给你初始序列和一段经过部分排序后的序列,问是经过了堆排序还是插入排序,输出排序方式并输出该排序下的下一步的输出序列。解题思路:模拟堆和插入排序的步骤即可,插入用sort更方便一些。每次完成一步后和目标序列进行比较,相同就再进行一步然后返回输出即可。代码如下:#include<iostream>#include<cstdio>#include<...原创 2019-02-15 21:51:44 · 204 阅读 · 0 评论 -
1138 Postorder Traversal
题目大意:给出二叉树前序遍历和中序遍历,要求输出后序遍历第一个数。解题思路:用前序和中序构建二叉树时递归返回的第一个节点就是后序遍历的第一个数。代码如下:#include<iostream> using namespace std;int in[50010],pre[50010],n;struct node{ int data; node* lchild; n...原创 2019-02-22 11:29:17 · 271 阅读 · 0 评论 -
数据结构中的各种树
转载一篇不错的博文,如题:点击这里转载 2019-02-22 19:39:46 · 237 阅读 · 0 评论 -
1020 Tree Traversals
题目大意:给你二叉树结点数和后序,中序遍历结果,要求输出层次遍历的结果。解题思路:二叉树板子题,根据后序中序构建二叉树,然后通过BFS遍历输出层次序列即可。代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<set>#include<cmath&g...原创 2019-02-12 16:51:01 · 271 阅读 · 0 评论 -
1110 Complete Binary Tree
题目大意:判断是不是完全二叉树,是则输出最后一个节点的下标,否则输出根节点下标。解题思路:一开始从输入上投机(只有右子没有左子肯定不是,只有左子没有右子但是数量超过2也不是),只拿到18分(忽略了右子树饱满没有左子树的情况)。正确的做法是维护一个下标参数(指完全二叉树结点与位置对应关系),DFS遍历树,如果最大结点的编号正好等于最大的下标证明是一个完全二叉树,否则必然有空缺的位置(该下标下...原创 2019-02-27 10:50:10 · 631 阅读 · 0 评论