pat甲級1127題解 c 簡潔

2021-10-20 14:33:13 字數 1453 閱讀 2289

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...