9 樹的建立與基本操作

2021-08-10 22:25:15 字數 3204 閱讀 5930

在本實驗中,程式的輸入是乙個表示樹結構的廣義表。假設樹的根為 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 其中 代表空指標。輸出 二叉樹的凹入表示 二叉樹的先序序列 中序序列 後序序列 二叉樹葉子結點個數 ...