對於給定的二叉樹,本題要求你按從上到下、從左到右的順序輸出其所有葉節點。
首先第一行給出乙個正整數 n(≤10),為樹中結點總數。樹中的結點從 0 到 n−1 編號。隨後 n行,每行給出乙個對應結點左右孩子的編號。如果某個孩子不存在,則在對應位置給出 "-"。編號間以 1 個空格分隔。
在一行中按規定順序輸出葉節點的編號。編號間以 1 個空格分隔,行首尾不得有多餘空格。
8
1 -- -
0 -2 7
- -- -
5 -4 6
4 1 5
解題思路
用結構體存節點資訊,先記錄節點序號,左孩子,右孩子。找到根節點,即不是任何節點孩子的節點,從根節點開始搜尋,因為題目要求從上到下,從左到右,所以搜尋的時候要記錄一下深度,搜尋順序先左孩子再右孩子,並記錄是第幾(id)個搜到的節點,這樣同樣深度的節點裡,在右邊的會比在左邊的晚搜到。把深度和id存入結構體。搜尋完後排序,讓深度小(高)的,深度相同且id小(左邊)的,排在前面。然後遍歷,沒有左孩子且沒有右孩子(葉子節點)的,輸出其節點序號。
**如下
#include #include #include using namespace std;
struct t
};t tree[15];
int id;
void dfs(int x, int cnt)
if(tree[x].rchild != -1)
}int main()
; //i有沒有父親節點
for(int i = 0; i < n; i ++)
else
tree[i].lchild = -1;
if(str2[0] != '-')
else
tree[i].rchild = -1;
} int root = -1;
for(int i = 0; i < n; i ++)
} id = 0;
dfs(root, 1);
sort(tree, tree + n); //排序
bool first = true;
for(int i = 0; i < n; i ++)
} cout << endl;
return 0;
}
列出葉結點 25分
對於給定的二叉樹,本題要求你按從上到下 從左到右的順序輸出其所有葉節點。輸入格式 首先第一行給出乙個正整數 n 10 為樹中結點總數。樹中的結點從 0 到 n 1 編號。隨後 n 行,每行給出乙個對應結點左右孩子的編號。如果某個孩子不存在,則在對應位置給出 編號間以 1 個空格分隔。輸出格式 在一行...
列出葉結點 25分
對於給定的二叉樹,本題要求你按從上到下 從左到右的順序輸出其所有葉節點。輸入格式 首先第一行給出乙個正整數 n 10 為樹中結點總數。樹中的結點從 0 到 n 1 編號。隨後 n 行,每行給出乙個對應結點左右孩子的編號。如果某個孩子不存在,則在對應位置給出 編號間以 1 個空格分隔。輸出格式 在一行...
PTA 列出葉結點 25分
pta 列出葉結點 題目描述 對於給定的二叉樹,本題要求你按從上到下 從左到右的順序輸出其所有葉節點。輸入格式 首先第一行給出乙個正整數 n 10 為樹中結點總數。樹中的結點從 0 到 n 1 編號。隨後 n 行,每行給出乙個對應結點左右孩子的編號。如果某個孩子不存在,則在對應位置給出 編號間以 1...