pat1127a
大意:給出一棵二叉樹的中序、後序遍歷,要求按z字形輸出此二叉樹的層次遍歷(z字形:根節點為第1層,奇數層從左往右輸出,偶數層從右往左輸出)
思路:此題難點在於z字形輸出,正常層序遍歷層數小的優先輸出而每層下標小的優先輸出,容易想到z字形輸出只要在層數為奇數時將下標大的優先輸出就可實現。
步驟:在建樹過程中儲存每個結點所在層數和下標(按完全二叉樹設定下標:left_child=parent2,right_child=parent2+1),將所有結點用vector陣列儲存,最後呼叫sort對該陣列進行排序:層數小的優先,層數相同情況下奇數層下標小優先,偶數層下標大優先。
#include
#include
#include
using
namespace std;
struct node
;vector<
int> in,post;
vector> ans;
void
build
(int b1,
int e1,
int b2,
int e2,
int lev,
int index)
node* newn;
newn=
new node;
newn-
>lev=lev;
newn-
>val=root;
newn-
>index=index;
ans.
push_back
(newn)
;build
(b1,i-
1,b2,b2+i-
1-b1,lev+1,
2*index)
;build
(i+1
,e1,b2+i-b1,e2-
1,lev+1,
2*index+1)
;}bool
cmp(node* a,node*b)
intmain()
for(
int i=
0;i)build(0
,in.
size()
-1,0
,post.
size()
-1,1
,1);
sort
(ans.
begin()
,ans.
end(
),cmp)
;for
(int i=
0;isize()
-1;i++
) cout
->val;
system
("pause");
return0;
}
PAT甲級題解目錄
寫在前面 9月8號剛參加了第一次pat甲級考試,成績還算是滿意。但是沒有滿分,算是有一點小遺憾,於是打算12月再來一次,但是這次採用佛系備考與吃老本的複習方法 畢竟初試重要啊 為了記錄一下成長歷程和各題要點,順便做乙個部落格題解,也給有需要的戰友們提供乙個參考吧。本部落格純屬個人記錄與經驗分享,不帶...
PAT甲級題解1004
注意的是m代表的是the number of non leaf nodes 要看清楚題意,一開始把n m認為是輸入的行數了 利用vector特性 題意大致是尋找每層葉結點的個數,dfs遍歷這棵樹,遍歷時統計即可。include using namespace std const int maxn 1...
PAT甲級題解 1021
先判斷有幾個連通塊嗎,因為已經滿足邊的個數等於頂點個數減1所以一定是一棵樹,只要是1.本來用的是優先佇列,最後發現沒過,其實是error k components 少了個s看題目一定要仔細 include using namespace std const int maxn 10100 vector...