问题: 对于一棵度为k的树,已知其中度为i的节点数为 n i n_i ni,求总节点数 n 0 n_0 n0及叶子总数 n n n
推导:
-
设一棵树
T
的度为 k , ( k < n ) k, (k<n) k,(k<n),已知其中度为i的节点数为 n i n_i ni,则:
n = ∑ k = 0 n n i \begin{aligned} n=\sum_{k=0}^nn_i \\ \end{aligned} n=k=0∑nni -
设树T的边数为 e e e,由于根节点入度为 0 0 0,其余各节点的入度均为 1 1 1,因此:
e = n − 1 e = n-1 e=n−1 -
对于度为 i i i的节点,由于其个数为 n i n_i ni,因此从这些节点出发的边数为
e ′ = ∑ k = 1 n n i ∗ i \begin{aligned} e'=\sum_{k=1}^nn_i*i \\ \end{aligned} e′=k=1∑nni∗i -
显然上述 e ′ = e e'=e e′=e,即:
n − 1 = ∑ k = 1 n n i ∗ i \begin{aligned} n-1=\sum_{k=1}^nn_i*i \\ \end{aligned} n−1=k=1∑nni∗i -
从而:
n = ∑ k = 1 n n i ∗ i + 1 \begin{aligned} n=\sum_{k=1}^nn_i*i+1 \\ \end{aligned} n=k=1∑nni∗i+1 -
因此对于度为k的树,其节点总数为其中具有不同度数的节点数与其度数的乘积再加一
-
结合两个节点总数公式,有:
∑ k = 0 n n i = ∑ k = 1 n n i ∗ i + 1 n 0 = ∑ k = 1 n n i ∗ i − ∑ k = 1 n n i + 1 \begin{aligned} \sum_{k=0}^nn_i=\sum_{k=1}^nn_i*i+1 \\ n_0=\sum_{k=1}^nn_i*i-\sum_{k=1}^nn_i+1 \end{aligned} k=0∑nni=k=1∑nni∗i+1n0=k=1∑nni∗i−k=1∑nni+1
特别的, 当 k = 2 k=2 k=2时,总结点数 n = n 1 + 2 ∗ n 2 + 1 n=n_1+2*n_2+1 n=n1+2∗n2+1,叶子节点数 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
例题:
在一棵度为4的树T中,若有10个度为4的节点,30个度为3的节点,5个度为2的节点,10个度为1的节点,求T的叶子节点数。
解:
由题意可以得出树T的节点总数
n
=
∑
k
=
1
n
n
i
∗
i
+
1
=
10
∗
4
+
30
∗
3
+
5
∗
2
+
10
∗
1
+
1
=
151
n=\sum_{k=1}^nn_i*i+1=10*4+30*3+5*2+10*1+1=151
n=k=1∑nni∗i+1=10∗4+30∗3+5∗2+10∗1+1=151
因此叶子节点数
n
0
=
n
−
∑
k
=
1
n
n
i
=
151
−
(
10
+
30
+
5
+
10
)
=
96
n_0=n-\sum_{k=1}^nn_i=151-(10+30+5+10)=96
n0=n−k=1∑nni=151−(10+30+5+10)=96