7 16 列出葉結點 25分 C語言實現

2021-10-04 20:19:08 字數 1714 閱讀 8091

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

輸入格式:

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

輸出格式:

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

輸入樣例:

|8|1 -

|- -

|0 -

|2 7

|- -

|- -

|5 -

|4 6

輸出樣例:

4 1 5

#include

#include

typedef

struct node *node;

struct node

;typedef

struct snode *tree;

struct snode

;int flag=1;

//判斷輸出時第乙個字母不帶空格

tree buidtree

(int rot,node nod)

;void

myprint

(tree t)

;int

main()

; node tr[14]

;char ch;

scanf

("%d"

,&n)

;scanf

("%c"

,&ch)

;//清除回車

char str[5]

;//輸入資料,沒有孩子的預設為1

for(

int i=

0;i)else t->left=-1

;if(str[2]

!='-'

)else t->right=-1

; t->on=i;

//記住父節點值

tr[i]

=t;}

//找根結點

for(j;j(num[j]==0

)break

; tree t=

buidtree

(j,tr)

;myprint

(t);

}//層序輸出

void

myprint

(tree t)

if(tep->left)

//入隊

if(tep->right)}}

tree buidtree

(int rot,node nod)

else tr->left=

null;if

(t->right!=-1

)else tr->right=

null

;return tr;

}

我寫的這個解法,其實用結構體陣列輸入儲存的資料其實讓**有點複雜,但也挺好理解的,如果用二維陣列儲存**會簡潔一些。

這題第一步是要找到沒有出現的數字為根節點。

第二步就是遞迴左右子樹,以左右子樹的根結點的值遞迴。也就是根結點左右孩子裡的值為陣列下標的。

第三步就是層序輸出了,遇到沒有左右孩子的結點就輸出就好了。

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