
数据结构
沐兮Krystal
这个作者很懒,什么都没留下…
展开
-
堆,优先队列,二叉搜索树实现
//堆 int heap[maxn],sz=0;//插值 void push(int x){ int i,p; i=sz++; while(i>0){ //父亲节点的编号 p=(i-1)/2; //已经没有颠倒的 if(heap[p]<=x){ break; } //把父亲节点的值放下来 heap[i]=heap[p]; i=p; } heap[i]=x;}//取值 int pop(){ //最小值 int ret=he原创 2020-09-23 15:24:01 · 389 阅读 · 0 评论 -
PTA 7-4 小字辈(dfs)
https://pintia.cn/problem-sets/1259041418971803648/problems/1259047109883162624(题目链接如上)题意:给定一个庞大家族的家谱,要请你给出最小一辈的名单。题解:结点设计:struct tnode{ int parent; int num; int level;//记录辈分,即在树的第几层}node[100005];思路:对每个结点,深搜直到它的祖先根节点返回,回溯的时候每一层的层数等于上一层的层数加一。如果搜原创 2020-05-23 23:11:59 · 726 阅读 · 0 评论 -
PTA 7-3 列出叶结点
https://pintia.cn/problem-sets/1259041418971803648/problems/1259046259496415233(题目链接如上)题解:1,用结构数组存储,注意char转换为int。2,利用vis数组记录出现过的孩子结点,则未出现过的即为根节点。3,最后再层序遍历(宽搜)输出叶子节点。AC代码:#include <iostream>#include <queue>using namespace std;int leave原创 2020-05-23 21:09:18 · 1593 阅读 · 0 评论 -
PTA 7-1 玩转二叉树
https://pintia.cn/problem-sets/1259041418971803648/problems/1259046259492220928(题目链接如上)题意:给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。利用中序遍历和前序遍历建树:node* buildPreInTree(int pl,int pr,int il,int ir){ if(il>ir) return NULL;原创 2020-05-23 11:53:17 · 3223 阅读 · 1 评论 -
Codeforces D.Constructing the Array(优先队列)
https://codeforces.ml/contest/1353/problem/D(题目链接↑)题解这题主要用到优先队列,size(区间长度)大的排在前,size相同的left(左端点)小的排在前。主要积累一下这里的语法:struct node{ int size,l,r; bool operator > (const node& a) const{ if(size!=a.size) return size<a.size; else return l>a原创 2020-05-20 17:51:35 · 282 阅读 · 0 评论 -
树和二叉树(学习笔记)
树和二叉树树是n个结点的有限集。根——即根节点(没有前驱)叶子——即终端结点(没有后继)森林——即m棵不相交的树的集合有序树,无序树结点的度——结点挂接的子树数树的度——所有结点度中的最大值可以证明,所有树都能转为唯一对应的二叉树二叉树的基本特点:1.结点的度≤22.有序树二叉树的性质:1.在二叉树的第i层上至多有2^(i-1)个结点。2.深度为k的二叉树至多有2^k-...原创 2020-05-06 00:59:41 · 371 阅读 · 0 评论