如果大家有很长时间没有看算法了,不妨从二叉树这块开始往起捡。因为其上承接线性表,下联系图论只是,掌握好树这块的理论知识具有重要意义。我将给大家整理下易忘的树与二叉树理论推导。
- 具有n个节点的m叉树的最小高度为 ⌈(logn(m−1)+1m)⌉
理论推导:要求最小高度,则最底层的上面节点应是满m叉树,算上底层节点,其可以是一颗完全m叉树,关于满m(2)叉树,大家有两点需要记住:
1. 满m叉树中,第i层的节点数为
mi−1
2. 满2叉树中,第i层以上(含i层)的节点总数为
2i−1
,对于满m叉树,大家可以自己推一下(等比数列),各层节点加起来就是节点总数。
这样,设含有n个节点的m叉树的完全m叉树高度为h,则:
1+m1+m2+⋯+mh−2<n≤1+m1+m2+⋯+mh−2+mh−1
不等式两边是等比数列,根据等比数列求和公式:
Sn=a1−anq1−q=a1(1−qn)1−q,q≠1
有: 1−mh−11−m<n≤1−mh1−m ,整理得:
mh−1<n(1−m)+1)≤mh ,两边取对数有:
h−1<logn(1−m)+1m≤h ,那么h应该向上取整, h=⌈(logn(m−1)+1m)⌉ ,得证。
高度为h的m叉树至多有 (mh−1)m−1 个节点
理论证明:仍然从每层节点个数入手,所有层加起来就是总的节点数。
第h层节点数: mh−1
第h-1层节点数: mh−2
⋯
第2层节点数:m
第1层节点数:1
把所有层节点数加起来:
sum=1+m1+⋯+mh−2+mh−1=mh−1m−1
树中节点数等于所有节点的度数加1
证明:节点的度相当于该节点拥有的子树的棵数(分支数),也即该节点拥有的孩子节点的数量。而在树所有的节点中,只有根节点不能做孩子结点,因此节点度数和节点数差1。(本质上就在找孩子节点,多少个孩子节点就有度数就为多少,只有根不能作为孩子节点)