解答想法
程式的輸入是乙個表示樹結構的廣義表。假設樹的根為 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: 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
of
hdegree 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
#include
#define maxn 100
using
namespace std;
intmain()
;//用來記錄每個單詞的深度
int depth =-1
;//當前遍歷的深度
for(
int i =
0; i < len; i++
)else
if(tmp[i]
==')'
)else
if(tmp[i]
==','
)else
}for
(int i =
0; i < num; i++
) cout << ch[i]
<< endl;
}int degree[maxn]=;
//每個字母的度
int node[maxn]=;
//每個度的字母數量
int max =0;
//最大度
for(
int i =
0; i < num; i++)if
(level[j]
== level[i]+1
)}node[degree[i]]++
;if(degree[i]
> max)
} cout <<
"degree of tree: "
<< max << endl;
for(
int i =
0; i <= max; i++
)return0;
}
乙個度為4的節點對應有4條出邊,
乙個度為3的節點對應有3條出邊,
乙個度為2的節點對應有2條出邊,
乙個度為1的節點對應有條出邊,
葉子節點沒有出邊。
如例中:
a,b兩點都有兩個出邊,故他們的度都為2
f點的出邊有三個,所以他的度為3
其餘點都為葉子節點沒有出邊,故他們的度為0
樹的建立與基本操作
在本實驗中,程式的輸入是乙個表示樹結構的廣義表。假設樹的根為 root 其子樹森林 f t1 t2 tn 設與該樹對應的廣義表為 l 則 l 原子,子表 1 子表 2 子表 n 其中原子對應 root 子表 i 1 程式的輸出為樹的層次結構 樹的度以及各種度的結點個數。在輸出樹的層次結構時,先輸出根...
9 樹的建立與基本操作
在本實驗中,程式的輸入是乙個表示樹結構的廣義表。假設樹的根為 root 其子樹森林 f t1 t2 tn 設與該樹對應的廣義表為 l 則 l 原子,子表 1 子表 2 子表 n 例如 廣義表 a,b,c d f,g h i 表示的樹如圖所示 程式的輸出為樹的層次結構 樹的度以及各種度的結點個數。在輸...
二叉樹的建立與基本操作
編寫程式實現二叉樹的如下操作 1 建立二叉鍊錶 2 二叉樹的先序 中序 後序遍歷 3 求解二叉樹的葉子結點個 4 將二叉樹中所有結點的左 右子樹相互交換 輸入 擴充套件二叉樹先序序列 ab d ce 其中 代表空指標。輸出 二叉樹的凹入表示 二叉樹的先序序列 中序序列 後序序列 二叉樹葉子結點個數 ...