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 個空格分隔。在一行中按規定順序輸出葉節...