7 1 列出葉結點(25 分) 資料結構

2021-08-17 19:31:34 字數 2070 閱讀 9344

7-1 列出葉結點(25 分)

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

輸入格式:

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

輸出格式:

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

輸入樣例:

8 1 -

- -

0 -

2 7

- -

- -

5 -

4 6輸出樣例:

4 1 5

思路

先找出 根節點

怎麼找呢

可以想到 根節點 不會是任何乙個結點的 兒子

那麼 我們只要標記一下 那些兒子 剩下的哪乙個 就是 根節點

然後從根節點 往下遍歷

遍歷到 乙個結點 沒有兒子的 那麼就將它 push 進乙個 vector

然後最後 輸出就可以了

ac**

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define clr(a) memset(a, 0, sizeof(a))

#define pb push_back

using

namespace

std;

typedef

long

long ll;

typedef

long

double ld;

typedef

unsigned

long

long ull;

typedef pair pii;

typedef pair pll;

typedef pair psi;

typedef pair pss;

const

double pi = 3.14159265358979323846264338327;

const

double e = exp(1);

const

double eps = 1e-30;

const

int inf = 0x3f3f3f3f;

const

int maxn = 1e2 + 5;

const

int mod = 1e9 + 7;

int v[10];

struct node

q[10];

void init()

queue

q;vector

ans;

void bfs()

if (q.size())

bfs();

}int main()

if (b == '-')

q[i].r = -1;

else

}int root;

for (int i = 0; i < n; i++)

}q.push(root);

bfs();

vector

::iterator it;

for (it = ans.begin(); it != ans.end(); it++)

cout

<< endl;

}

7 7 列出葉結點 (25 分)

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

7 14 列出葉結點 25 分

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

7 3 列出葉結點 25分

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