如果有哪位同學幸運的看到這篇題解:恭喜你,你賺大了!你會看到乙個簡單理解而且實用的技巧。
乍一看,不就是前序中序建樹嘛。。有什麼奇怪的。如果此題常規建樹,後序遍歷後兩個測試用例超時!。
那麼怎麼進行優化呢?顯然 在尋找根結點時候,不用for迴圈(題中注釋),而改用map!map在輸入的時候已經記錄了根節點的位置!
#include
#include
#include
using namespace std;
struct node
;int pre[
100100];
int in[
100100];
vector<
int>
v;map<
int,
int>
m;node*
create
(int prel,
int prer,
int inl,
int inr)
node* root =
newnode
; root-
>data = pre[prel]
;// int k ;
// for(k =inl;k
// if(in[k]==pre[prel])
// break;
// }
int k =m[root-
>data]
;int numleft = k -inl;
// int numright = inr-k;
// if(numleft==0&&numright==0)
root-
>lchild=
create
(prel+
1,prel+numleft,inl,k-1)
; root-
>rchild =
create
(prel+numleft+
1,prer,k+
1,inr)
;return root;
}void
postorder
(node* root)
postorder
(root-
>lchild)
;postorder
(root-
>rchild)
;int k=root-
>data;
coutv.
push_back
(k);
return;}
int n;
intmain()
for(
int i =
0;i) node* root =
create(0
,n-1,0
,n-1);
postorder
(root)
; cout<;return0;
}
如果有哪位同學幸運的看到這篇題解:恭喜你,你賺大了!你會看到乙個簡單理解而且實用的技巧。
乍一看,不就是前序中序建樹嘛。
浙江大學PAT甲級A1020(C )題解
include include include using namespace std const int content 50 struct node int post content int in content node create int postl,int postr,int inl,i...
浙江大學PAT甲級A1074題解 C 2
include include include using namespace std struct node int main while first 1 first next first for int i k i real.size i i k cout int i 0 isize i els...
浙江大學pat 1001
注意點 1.對於輸出結果是負數先輸出負號 2.將結果轉化成char型別來進行輸出可以避免輸出 的複雜操作。這裡使用函式sprintf 實現。如下 include include include include include include define maxnum 0x3f3f3f3f defi...