列出葉結點 (25 分)

2021-09-12 03:08:12 字數 1186 閱讀 3640

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

首先第一行給出乙個正整數 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...