列出葉結點

2021-10-18 22:46:11 字數 1431 閱讀 6513

問題:

對於給定的二叉樹,本題要求你按從上到下、從左到右的順序輸出其所有葉節點。

輸入格式:

首先第一行給出乙個正整數 n(≤10),為樹中結點總數。樹中的結點從 0 到 n−1 編號。隨後 n 行,每行給出乙個對應結點左右孩子的編號。如果某個孩子不存在,則在對應位置給出 「-」。編號間以 1 個空格分隔。

輸出格式:

在一行中按規定順序輸出葉節點的編號。編號間以 1 個空格分隔,行首尾不得有多餘空格。

輸入樣例:

81 -

0 -2 7

5 -4 6

輸出樣例:

4 1 5

思路:

先找根結點,根結點不為任何結點的子結點,遍歷一次,不是葉子結點的,就是根結點。

然後從根結點開始,上到下,左到右遍歷查詢沒有子葉(沒有左右子夜即為子葉)

**思路:

第一步:從鍵盤輸入i結點的左右子葉,用pair儲存,frist為左子葉,second為右子葉,並用陣列記錄該結點是否為子葉

第二步:廣度搜尋,定義佇列,將上到下,左到右的結點分別放入佇列,順序查詢

第三步:將沒有左右子葉的元素輸出,有子葉的子葉部分存入佇列

第四步:刪除佇列已遍歷結點

**:

#include

#include

#include

const

int max =15;

using

namespace std;

intmain()

;//記錄每個結點的左右子葉,空為-1,不空為1,hash記錄該結點是子葉否為子葉

int n;

cin>>n;

if(n ==0)

char a,b;

for(

int i =

0; i < n; i++

)else

if(b !=

'-')

else

} queue<

int> q;

for(

int i =

0; i < n; i++

)int count;

int t =0;

while

(!q.

empty()

)if(p[q.

front()

].second !=-1

)if(!count)

} q.

pop();

//刪除遍歷的結點

}return0;

}

列出葉結點

對於給定的二叉樹,本題要求你按從上到下 從左到右的順序輸出其所有葉節點。輸入格式 首先第一行給出乙個正整數 n 10 為樹中結點總數。樹中的結點從 0 到 n 1 編號。隨後 n 行,每行給出乙個對應結點左右孩子的編號。如果某個孩子不存在,則在對應位置給出 編號間以 1 個空格分隔。輸出格式 在一行...

列出葉結點

對於給定的二叉樹,本題要求你按從上到下 從左到右的順序輸出其所有葉節點。輸入格式 首先第一行給出乙個正整數 n 10 為樹中結點總數。樹中的結點從 0 到 n 1 編號。隨後 n 行,每行給出乙個對應結點左右孩子的編號。如果某個孩子不存在,則在對應位置給出 編號間以 1 個空格分隔。輸出格式 在一行...

PAT 列出葉結點

首先第一行給出乙個正整數 n 10 為樹中結點總數。樹中的結點從 0 到 n 1 編號。隨後 n 行,每行給出乙個對應結點左右孩子的編號。如果某個孩子不存在,則在對應位置給出 編號間以 1 個空格分隔。在一行中按規定順序輸出葉節點的編號。編號間以 1 個空格分隔,行首尾不得有多餘空格。8 1 0 2...