在本實驗中,程式的輸入是乙個表示樹結構的廣義表。假設樹的根為 root ,其子樹森林 f = ( t1 , t2 , … , tn ),設與該樹對應的廣義表為 l ,則 l =(原子,子表 1 ,子表 2 , … ,子表 n )。例如:廣義表 (a,(b,(c),(d)),(f,(g),(h ),(i))) 表示的樹如圖所示:
程式的輸出為樹的層次結構、樹的度以及各種度的結點個數。
在輸出樹的層次結構時,先輸出根結點,然後依次輸出各個子樹,每個子樹向裡縮排 4 個空格,如:針對上圖表示的樹,輸出的內容應為:
abc
dfgh
i
degree of tree: 3
number of nodes of degree 0: 5
number of nodes of degree 1: 0
number of nodes of degree 2: 2
number of nodes of degree 3: 1
例: (下面的黑體為輸入)
(a,(b),(c,(d),(e,(g),(h )),(f)))
abc
degh
f
degree of tree: 3
number of nodes of degree 0: 5
number of nodes of degree 1: 0
number of nodes of degree 2: 2
number of nodes of degree 3: 1
測試用例1
輸入:
(a,(b),(c,(d),(e,(g),(h)),(f)))
輸出:
abc
degh
fdegree of tree: 3
number of nodes of degree 0: 5
number of nodes of degree 1: 0
number of nodes of degree 2: 2
number of nodes of degree 3: 1
測試用例2:
輸入:
(a,(b,(c,(d),(e)),(f)),(g,(h),(i)),(j,(k,(m),(n),(o),(p,(r)))))
輸出:
abc
defg
hijk
mnop
rdegree of tree: 4
number of nodes of degree 0: 9
number of nodes of degree 1: 2
number of nodes of degree 2: 3
number of nodes of degree 3: 1
number of nodes of degree 4: 1
測試用例3:
輸入:
(a,(b),(c),(d,(m),(n)),(e,(o)),(f),(h))
輸出:
abc
dmne
ofhdegree of tree: 6
number of nodes of degree 0: 7
number of nodes of degree 1: 1
number of nodes of degree 2: 1
number of nodes of degree 3: 0
number of nodes of degree 4: 0
number of nodes of degree 5: 0
number of nodes of degree 6: 1
測試用例4:
輸入:
(a)
輸出:
a degree of tree: 0
number of nodes of degree 0: 1
測試用例5:
輸入:
() 輸出:
degree of tree: 0
number of nodes of degree 0: 0
解析:由於有了第8題的經驗,首先我們用乙個陣列記錄,再可根據depth進行分等級輸出,即要4*depth個空格。本題難點在於怎麼數節點度數。根據廣義表的形式可發現乙個規律,每」()」內的」,」數n即為度數n,然後degs[n]++一下即可。統計」()」內的」,」數,我是匹配掃瞄的,例 (a,(b,(c),(d)),(f,(g),(h ),(i))) ,第一次匹配掃瞄從第乙個」(「開始,然後找到其對應的」)」,即(a,(b,(c),(d)),(f,(g),(h ),(i))) 數其中的」,」即(a,(b,(c),(d)),(f,(g),(h ),(i))) 有2個即degs[2]++,同時掃瞄過的字元變為」 「防止干擾,繼續此操作 (b,(c),(d)) (f,(g),(h ),(i)),後面也以此類推,不過要注意(a)與()的區分,前著內有字元而非空,可用flag標記一下。
#include
int main()
; char str[1005];
scanf("%s", str);
for (int i=0;str[i]!='\0';i++)
if (ch == ')')
if (ch >= 'a'&&ch <= 'z')
}int point = 0;
while (str[point] != '\0')
}if (str[i] == ','&&l_num == 1)
}if (flag)
degs[ds]++;
}point++;
}for(int i=99;i>=0;i--)
if (degs[i] != 0)
printf("degree of tree: %d\n", deg);
for (int i = 0; i <= deg; i++)
printf("number of nodes of degree %d: %d\n", i, degs[i]);
return
0;}
樹的建立與基本操作
在本實驗中,程式的輸入是乙個表示樹結構的廣義表。假設樹的根為 root 其子樹森林 f t1 t2 tn 設與該樹對應的廣義表為 l 則 l 原子,子表 1 子表 2 子表 n 其中原子對應 root 子表 i 1 程式的輸出為樹的層次結構 樹的度以及各種度的結點個數。在輸出樹的層次結構時,先輸出根...
樹的建立與基本操作
解答想法 程式的輸入是乙個表示樹結構的廣義表。假設樹的根為 root 其子樹森林 f t1 t2 tn 設與該樹對應的廣義表為 l 則 l 原子,子表 1,子表2,子表 n 其中原子對應 root 子表i 1測試樣例1 a,b c,d e,g h f abc degh fdegree of tree...
二叉樹的建立與基本操作
編寫程式實現二叉樹的如下操作 1 建立二叉鍊錶 2 二叉樹的先序 中序 後序遍歷 3 求解二叉樹的葉子結點個 4 將二叉樹中所有結點的左 右子樹相互交換 輸入 擴充套件二叉樹先序序列 ab d ce 其中 代表空指標。輸出 二叉樹的凹入表示 二叉樹的先序序列 中序序列 後序序列 二叉樹葉子結點個數 ...