github中有详尽代码可作参考
返回目录
树的性质
- 树中的结点数等于所有节点的度数之和加 1;
- 在 n个结点的树中有 n−1条边(度);
- 树的度(指各结点的度的最大值);
- m叉树(指每个结点最多只能有 m个孩子的树);
度为 m的树和 m叉树比较
- 度为 m的树(或 m叉树)第 i层至多有 mi−1个结点( i≥1),此时整棵树是一个完全 m叉树;
- 高度为 h的 m叉树(或度为 m的树)至多有 mh−1m−1个结点;
- 高度为 h的 m叉树至少有 h个结点,高度为 h的 度为 m的树至少有 h+m−1个结点;
证明: 在完全 m叉树中,第一层有 m0=1,第二层 m1,第三层 m2, ⋯,第 h层 mh−1,总共 1+m1+m2+⋯+mh−1=1(1−mh)1−m=mh−1m−1.
由于 m叉树中,每一个高度至少为 1,故 至少有 h个结点;
而在度为 m的树中,至少有一个结点有 m个分支,且满足每层的结点尽可能少,即 h−1+m,如下图所示.
![]()
- 具有 n个结点的 m叉树(或度为 m的树)的最小高度为 ⌈logm(n×(m−1)+1)⌉;
证明: 所有结点都有 m个孩子,可由上一个性质知:
其中前 h−1层最多有多少个结点表示为 mh−1−1m−1,前 h层最多有多少和结点表示为 mh−1m−1.
故 mh−1−1m−1<n≤mh−1m−1.
两边同时乘以 m−1,并 +1,得: mh−1<n×(m−1)+1≤mh
两边同取 logm,得: h−1<logm(n×(m−1)+1)≤h
故 hmin=⌈logm(n×(m−1)+1)⌉
- 设树中度为 i( i=0,1,2,⋯,m)的结点数为 ai,总结点个数 n为 m∑i=0ai(表示结点个数之和),亦可表示为 (m∑i=0i×ai)+1(表示所有结点的度数之和 +1)
对于一棵具有 n个结点、度为 4的树来说,( A)
A.树的高度至多是 n−3
B.树的高度至多是 n−4
C.第i层上至多有 4(i−1)个结点
D.至少在某一层上正好有 4个结点
树的度为 4说明至少有一个结点的度为 4,故 D错误,要想树的高度最高,需使树的每一层的结点尽可能少。将每一层只放一个结点的树高度为 n,而此时将最后三个结点放到了倒数第四个结点那一层,所以高度减少了 3,故树的高度至多为 n−3,故 A正确, B错误,度为 4的第 i层至多有 4i−1个结点, C错误.
度为 4、高度为 h的树,( A),
A.至少有 h+3个结点
B.至多有 4h−1个结点
C.至多有 4h个结点
D.至少有 h+4个结点
套结论
- 高度为 h的 m叉树(或度为 m的树)至多有 mh−1m−1个结点;
- 高度为 h的 m叉树至少有 h个结点,高度为 h的 度为 m的树至少有 h+m−1个结点;
故度为 4,高度为 h的树中,至少有 h+4−1=h+3个结点,至多有 4h−13.
假定一棵度为 3的树中,结点数为 50,则其最小高度为().
A. 3
B. 4
C. 5
D. 6
方法一:套结论
- 具有 n个结点的 m叉树(或度为 m的树)的最小高度为 ⌈logm(n×(m−1)+1)⌉;
由上知, ⌈log3(50×2+1)⌉=⌈log3101⌉=5
方法二:计算每层的个数,求和与结点数比较
2010统考真题:在一棵度为 4的树 T中,若有 20个度为 4的结点, 10个度为 3的结点, 1个度为 2的结点, 10个度为 1的结点,则树 T的叶结点个数是()。
A. 41
B. 82
C. 113
D. 122
套结论
- 树中的结点数等于所有节点的度数之和加 1;
设度为 0的结点(叶子结点)有 x个,由题知:总结点数可表示为: x×0+10×1+1×2+10×3+20×4+1(度数之和加 1);总结点数亦可表示为 x+10+1+10+20(结点个数和)
两式联立解得: x=82
5.1.1
含有 n个结点的三叉树的最小高度是多少?
套结论
- 具有 n个结点的 m叉树(或度为 m的树)的最小高度为 ⌈logm(n×(m−1)+1)⌉;
由上知, ⌈log3(n×2+1)⌉
5.1.2
已知一棵度为 4的树中,度为 0,1,2,3的结点数分别为 14,4,3,2,求该树的结点总数 n和度为 4的结点个数,并给出推导过程。
设树中度为 i( i=0,1,2,⋯,m)的结点数为 ai,总结点个数 n为 m∑i=0ai(表示结点个数之和),亦可表示为 (m∑i=0i×ai)+1(表示所有结点的度数之和 +1)
设度为 4的结点个数是 a4,由题知, n=14+4+3+2+a4=1×4+2×3+3×2+4×a4+1
解得: a4=2, n=25
5.1.3
已知一棵度为 m的树中,有 n1个度为 1的结点,有 n2个度为 2的结点 ⋯⋯有 nm个度为 m的结点,问该树有多少个叶子结点?
设度为 0的结点(叶子结点)有 n0个,设总结点个数为 n,
n=m∑i=0ni=n0+n1+n2+⋯+nm
n=(m∑i=0i×ni)+1=n0×0+n1×1+n2×2+⋯+nm×m+1
故 n0=n1+2n2+⋯+mnm+1−(n1+n2+⋯+nm)
=n2+2n3+3n4+⋯+(m−1)nm+1
=[m∑i=2ni×(i−1)]+1