pat 二刷樹部分 01

2021-10-25 15:24:35 字數 2748 閱讀 9415

//pat-143

#includeusing namespace std;

vectorpre;

mapex;

void lca(int a,int b)

else if(ex[a]==0)

else if(ex[b]==0)

while(1)

i++;

}//bst給的是結點的值的大小不是序號,所以是雙重索引

if((apre[i])||(a>pre[i]&&busing namespace std;

vectorin,pre;

mapex,pos;

void dfs(int root,int inll,int inrr,int a,int b)else if(ex[a]==0)else if(ex[b]==0)

int i,_1=0,_2=0;

_1=pos[a];

_2=pos[b];

//while(in[i]!=pre[root])i++;

i=pos[pre[root]];//一開始用while找位置總是re,全部改為鍵值對對應位置後終於解決掉那個re點了

if((_1i)||(_1>i&&_2i&&_2>i) dfs(root+i-inll+1,i+1,inrr,a,b);

else if(_1==i)

else if(_2==i)

} int main()

if(v[root].size()==0)

for(int i=0;iusing namespace std;

vectorpos,in;

struct node;

vectorpre;

void dfs(int root,int inll,int inrr,int index));

dfs(root-(inrr-i)-1,inll,i-1,2*index+1);

dfs(root-1,i+1,inrr,2*index+2);

}bool cmp(node&a,node&b)

dfs(root+1,inll,i-1);

dfs(root+i-inll+1,i+1,inrr);

ans.push_back(pre[root]);

/*else*///先右後左的方式只有知道原前中才能正好得出映象的後 ,而不是利用映象的前搭配

}bool cmp(int a,int b)

int main();

void insert(node*&root,int data)

if(root->data>data)else

}void pre(node*root,vector&v)

v.push_back(root->data);

pre(root->lc,v);

pre(root->rc,v);

}void prem(node*root,vector&v)

v.push_back(root->data);

prem(root->rc,v);//此時bst已有原樹 //prem寫成pre

prem(root->lc,v);

}void post(node*root,vector&v)

post(root->lc,v);

post(root->rc,v);//此時bst已有原樹

v.push_back(root->data);

}void postm(node*root,vector&v)

postm(root->rc,v);

postm(root->lc,v);//此時bst已有原樹

v.push_back(root->data);

}vectorinit,preo,premm,posto,postmm;

int main();

int wei[110],cnt=0;

vectorv[110];

vectorans[110],temp;

void dfs(int root,int k)

int main();

vectorin;

vectorans;

int cnt=0;

void dfs(int index,int n)

dfs(2*index+1,n);

ans.push_back(node);

dfs(2*index+2,n);

}bool cmp(node&a,node&b)

for(int i=0;iusing namespace std;

mappos;//in

vectorpre,in,post;

void dfs(int root,int inll,int inrr)

int main()else

} for(int i=0;iusing namespace std;

vectorv[100010];

double p,r,ans=0;

int cnt=0;

void dfs(int root,int le)

if(temp>ans)

/*if(temp==ans)*/

} for(int i=0;i10道 

生疏部分

1.1043 用鍊錶建bst

2.後中建樹裡面的引數設定

小問題在上面 

問題無

PAT刷題思路 01

簡單模擬 不涉及演算法,根據題目描寫來進行 編寫,考察 能力 查詢元素 圖形輸出 圖形其實就是由字元構成 弄清楚規則就行。兩種方法 日期處理 注意細節 大小月 平年閏年 細節繁瑣 進製轉化 字串處理 能很好體現 能力,有些題目中實現邏輯非常麻煩,且有很多細節和邊界 要注意 排序 一套連招直接帶走 s...

PAT刷題(二 排序)

大學期間專案做了不少,而在演算法題方面還是個小白。藉著考研機會,把pat甲級刷一遍,同時記錄一下心得。主要參考的是柳神的題解,略過了不會考或考的可能性很小的題。設定結構體儲存成績,分別排序計算排名就行啦。設定乙個exist陣列,用於快速定位特定id結構體的下標。通過設定乙個全域性變數flag,減少c...

記為考研複試刷pat第二題

原帖 讀入乙個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10 100 在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後乙個拼音數字後沒有空格。yi san wu inclu...