PAT甲級輔導課 樹 數葉子結點

2021-10-19 22:54:21 字數 2110 閱讀 7845

家庭關係可以用家譜樹來表示,給定乙個家譜樹,你的任務是找出其中沒有孩子的成員。

輸入格式

第一行包含乙個整數 n 表示樹中結點總數以及乙個整數 m 表示非葉子結點數。

接下來 m 行,每行的格式為:

id k id[1] id[2] ... id[k]

id 是乙個兩位數字,表示乙個非葉子結點編號,k 是乙個整數,表示它的子結點數,接下來的 k 個 id[i] 也是兩位數字,表示乙個子結點的編號。

為了簡單起見,我們將根結點固定設為 01。

所有結點的編號即為 01,02,03,…,31,32,33,…,n。

輸出格式

輸出從根結點開始,自上到下,樹的每一層級分別包含多少個葉子節點。

輸出佔一行,整數之間用空格隔開。

資料範圍021

01102輸出樣例:

0

1

樣例解釋

該樣例表示一棵只有 2 個結點的樹,其中 01 結點是根,而 02 結點是其唯一的子節點。

因此,在根這一層級上,存在 0 個葉結點;在下乙個級別上,有 1 個葉結點。

所以,我們應該在一行中輸出0 1。

就是樹的簡單遍歷(bfs和dfs),但是作為樹這章的第一題,對於樹的儲存,新增寫了比較詳細的解釋,

#include

using

namespace std;

const

int n=

110;

int n,m;

int h[n]

,e[n]

,ne[n]

,idx;

//鄰接表

int cnt[n]

,max_depth;

//cnt是記錄每個深度葉子節點的數目,max_depth統計最大深度

void

add(

int a,

int b)

//在鄰接表中新增元素,即在父節點a下面新增乙個孩子節點b

void

dfs(

int u,

int depth)

for(

int i=h[u]

;i!=-1

;i=ne[i]

)//遍歷鄰接表,就是遍歷當前元素的孩子們

}int

main()

}dfs(1

,0);

//從一號節點開始遍歷,第0層

cout<;for

(int i=

1;i<=max_depth;i++

) cout<<

' '<; cout

}

#include

using

namespace std;

typedef pair<

int,

int> pii;

const

int n=

110;

int n,m;

int h[n]

,e[n]

,ne[n]

,idx;

//鄰接表

int cnt[n]

,max_depth;

//cnt是記錄每個深度葉子節點的數目,max_depth統計最大深度

void

add(

int a,

int b)

//在鄰接表中新增元素,即在父節點a下面新增乙個孩子節點b

void

bfs())

;while

(q.size()

)else);

}}}}

intmain()

}bfs()

;//從一號節點開始遍歷,第0層

cout<;for

(int i=

1;i<=max_depth;i++

) cout<<

' '<; cout

}

關於開設書法輔導課的理由

在當今的社會大環境下,各種電子產品的興起,導致了乙個很值得我們 的乙個問題,就是國人的書寫水平急劇下降。隨著網際網路的飛速發展,人們已經習慣了在網上交流溝通,各種平台,論壇興起,以往的手書文字變成了敲敲鍵盤就解決了。書信這種通訊交流方式已經基本退出了歷史舞台。人們手寫的環境變得越來越狹窄,找乙個能寫...

PAT甲級1004樹的遍歷

個人覺得這題沒有1003南欸,就乙個樹的遍歷,把根找出來dfs就完事了,非常莫得技術含量,居然有30分,感覺有點點德不配位,題不配分哈哈哈哈哈哈 include include include include include include include include define inf 40...

PAT甲級 1020 樹的遍歷

用了乙個hash表方便後續的查詢工作。pos的作用是記錄中序遍歷中 的該值所在的陣列下標編號 int q n 模擬乙個佇列,用於輸出層序遍歷 intbuild int il,int ir,int pl,int pr void bfs int root 輸出個層序遍歷 int main int roo...