對於給定的二叉樹,本題要求你按從上到下、從左到右的順序輸出其所有葉節點。
輸入格式:
首先第一行給出乙個正整數 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 個空格分隔。在一行中按規定順序輸出葉節...