堆的判定
文章平均质量分 56
123
小鱼朵~
计算机小废宅
展开
-
1147 Heaps (30 分)
1147 Heaps (30 分) 题目大意 给定一组由完全二叉树层次遍历得到的序列,判断它是否是一个大根堆、小根堆、或非根堆。 基本思路 对于每一组数据,从它的最后一个非叶子结点开始逆序遍历,比较它与左右孩子结点的大小关系,先假设它是大根堆/小根堆,如果违反了大根堆或者小根堆的定义,则进行否定。然后输出这一组序列后序遍历的结果。 代码 #include <iostream> #include <algorithm> using namespace std; const int ma原创 2021-08-28 13:28:57 · 127 阅读 · 0 评论 -
1155 Heap Paths (30 分)
1155 Heap Paths (30 分) 题目大意 给定完全二叉树层序遍历得到的序列,输出每条叶子结点到根结点的路径(从右向左输出)。 基本思路 判断属于什么堆思路这里就不写了,请看A1147的思路。这里主要说明一下如何从右向左输出每一条路径: 定义一个数组depthc存放每个叶子结点的层次,index代表最高高度和第二高高度的临界叶子结点的编号,函数solve用来求路径(逆序),cnt存放当前是第几条路径,vector path[maxn]存放第cnt条路径的所有结点(逆序存放) 求出每个叶子节点的原创 2021-08-28 15:36:46 · 116 阅读 · 0 评论