![](https://img-blog.csdnimg.cn/20210108214519179.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
PAT -树的遍历 堆 DFS
按类整理 志在必得
江船夜雨听笛
我无法原谅 什么都不做 却抱有期待的自己 行动起来 必须行动起来
展开
-
pat-1143
代码一 有一个点 RE 运行超时此法在中序已知时可以针对一般树#include<iostream>#include<map>#include<vector>using namespace std;int main(){int m,n;cin>>m>>n;//如果是二叉树的话就不需要中序了只要抓住按值大小就是中序 vector<int> pre;map<int,bool>cp;pre.resize(.原创 2021-01-18 14:41:47 · 133 阅读 · 0 评论 -
pat-1151
值的二刷#include<iostream>#include<vector>#include<map>//少了这句话会出现如下错误//using namespace std; (注意) using namespace std; int m,n;vector<int> in,pre;map<int,int> pos;//此时中序刚好可以直接用左右i的序号就可以左右分开 //preroot 前序根节点 inll中序的左范围.原创 2021-01-16 22:18:49 · 175 阅读 · 0 评论 -
pat-1004
#include<iostream>#include<vector>using namespace std;int n ,k;vector<int> v[109];int level[109]={0};int maxlebel=0;void dfs(int root,int depth){ //end if(v[root].size()==0) { level[depth]++; if(depth>maxlebel) maxlebel=.原创 2021-01-16 17:20:48 · 77 阅读 · 1 评论 -
pat-1020
基础题参数填写要明确#include<iostream>#include<vector>#include<algorithm>using namespace std;vector<int> in,post;struct node{ int data; int index; };vector<node> level;int n;void dfs(int root,int inl,int inr ,int index).原创 2021-01-16 16:43:35 · 138 阅读 · 0 评论 -
pat-1043
值得二刷#include<iostream>#include<vector>using namespace std;int n;vector<int> post,pre;bool mirror=false;void postorder(int root,int tail){ int i,j; if(root>tail) return; if(!mirror) { i=root+1; j=tail; //题干规定右面是>.原创 2021-01-16 15:17:48 · 149 阅读 · 2 评论 -
pat-1053
值的二刷#include<iostream>#include<vector>#include<algorithm>using namespace std;struct node{ vector<int>child;//子 int w; } ; vector<node> v;//父 vector<int>path; int n,k,target; void dfs(int root,int nod.原创 2021-01-15 22:30:06 · 143 阅读 · 0 评论 -
pat-1064
法一:较麻烦#include<iostream>#include<vector>#include<cmath>#include<algorithm>using namespace std;int n;vector<int> in,level;//int levels=0,leaves=0,root=0;void levelorder(int index,int inl,int inr){ //end if(inl &g.原创 2021-01-15 16:54:14 · 172 阅读 · 0 评论 -
pat-1079
#include<iostream>#include<vector>#include<cmath>using namespace std;int n;double p,r;vector<int> v[100005],pr[100005];double sum=0;void dfs(int index,int depth){ if(v[index].size()==0) { sum+=pr[index][0]*.原创 2021-01-15 12:25:56 · 92 阅读 · 0 评论 -
pat-1086
#include<iostream>#include<vector>#include<stack>#include<cstdio>#include<cstring>using namespace std;int n;vector<int> pre,in,post,value;void postorder(int root,int inl,int inr){ //end if(inl>inr) ret.原创 2021-01-15 11:33:20 · 101 阅读 · 0 评论 -
pat-1090
#include<iostream>#include<vector>#include<cmath>using namespace std;int n;double p,r;vector<int>v[100009];//父节点下标,深度//有一个测试点未过是因为maxnum应该赋值为0 但是我赋值为1了 如果是只有一个结点的极端请况就会出错maxnum就会变为2(注意)int maxdepth=0,maxnum=0;//注意重置maxnum.原创 2021-01-14 22:51:31 · 73 阅读 · 0 评论 -
pat-1094
#include<iostream>#include<vector>using namespace std;int n,m;//层号直接与hashmap对应 int book[102]={0};vector<int>a[100];void dfs(int index,int level){ book[level]++; //叶节点那一层的大小本身为0所以直接是终止条件 for(int i=0;i<a[index].size();i++) .原创 2021-01-14 21:00:43 · 137 阅读 · 0 评论 -
pat-1099
#include<iostream>#include<algorithm>#include<vector>using namespace std;struct node{ int data,index,l,r,level;}a[109];int b[102];vector<node>ans;int cnt=0;void dfs(int root,int index,int level) { if(a[root].l!=-.原创 2021-01-14 19:36:35 · 118 阅读 · 0 评论 -
pat-1102
#include<iostream>#include<vector>#include<algorithm>using namespace std;int n,a[19][2];//保存镜像中序遍历 struct node{ int id,l,r,index,level;};vector<node> v1;//还需要层序号 //序号之间没有代差是同层的简单易行(注意) void dfs(int root,int index,int le.原创 2021-01-14 16:26:08 · 109 阅读 · 0 评论 -
pat-1103
#include<iostream>#include<vector>#include<cmath>using namespace std;int n,k,p;//1.最终答案2.临时答案3.最终最大值4,临时最大值int index=-1;int maxl=-1;//最终答案要初始化因为他有可能没答案要给出没答案的判别//建表 ^p>n停止 vector<int> tempans,ans,init;void inita().原创 2021-01-14 11:09:57 · 119 阅读 · 0 评论 -
pat-1106
#include<iostream> #include<vector>#include<math.h>using namespace std;int n;double p,r;int mindepth=1000000000;//最好带个零防止不够 vector<int> v[100009];//最小个数信息注意条件重置 int minnum=1;void dfs(int index,int depth){ //递归边界避免出门即.原创 2021-01-13 20:20:46 · 134 阅读 · 0 评论 -
pat-1110
#include<iostream>#include<stdio.h>using namespace std;int n,maxn=-1,ans=-1,have[100];struct node{ //int 前面不能是逗号(注意) int l, r;}a[100];//root为根节点 index为我们重新编的号码 void dfs(int root,int index){ if(index>maxn) { maxn=index; //把最.原创 2021-01-13 16:24:42 · 144 阅读 · 2 评论 -
pat-1115
#include<iostream>#include<vector>using namespace std;//这样声明num(1000)与num【1000】有什么区别 vector<int> num(1000);int n,a;struct node{ int v; //前面需不需要加struct struct node*left; struct node*right;};//传入参数要有根节点有值 //返回参数为node node* .原创 2021-01-13 11:49:51 · 189 阅读 · 1 评论 -
pat-1119
#include<iostream>#include<vector>using namespace std;vector<int> in,pre,post;int a;bool unique=true;int n;//需要四个变量确定范围 void getin(int prel,int postl,int postr){ //段错误可能使边界写的不对 (注意) if(postl>=postr){ if(postl==postr) .原创 2021-01-13 00:47:29 · 138 阅读 · 0 评论 -
pat-1127
#include<iostream>#include<vector> #include<queue>using namespace std;int n,root;int tree[35][2];//struct 最后要加; struct node{int index,depth;};//这如果不在result后面加大小会出现问题,也就是vector最好要指定大小;(注意) vector<int> in,post,result[35];.原创 2021-01-12 16:25:11 · 125 阅读 · 0 评论 -
pat-1138
#include<iostream>#include<vector>using namespace std;bool flag=false;vector<int>pre,in;//代表先序遍历中根节点, 左子树在中序遍历中的起始节点,左子树的结束节点(完整的一棵子树的位置) void postorder(int prei,int lin,int rin){ if(lin>rin||flag==true) return; int i=lin;.原创 2021-01-11 21:58:21 · 120 阅读 · 0 评论 -
pat-1147
#include<iostream>#include<vector>using namespace std;int m,n,ismin=1,ismax=1;int a[1009];vector<int> v;void postorder(int j){//没写终止条件 递归先写终止条件(注意) if(j>=n+1) return; postorder(j*2); postorder(j*2+1); printf("%d%s",a[j].原创 2021-01-11 16:59:08 · 68 阅读 · 0 评论 -
pat-1155
//PAT 1155#include<iostream>#include<vector>using namespace std;vector<int> v;//全局变量与局部变量要分清 int n,a[1009],ismin=1,ismax=1;//输入: n 结点个数 ,a层序遍历数组值 ,判断堆的逻辑判断值 void dfs(int j){ //终止条件 if(j*2>n&&j*2+1>n) { if(j<.原创 2021-01-11 14:20:49 · 120 阅读 · 1 评论