問題:
對於給定的二叉樹,本題要求你按從上到下、從左到右的順序輸出其所有葉節點。
輸入格式:
首先第一行給出乙個正整數 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...