若平衡二叉树的高度为6,且所有非叶结点的平衡因子均为 1,则该平衡二叉树的结点总数为( )。
我们从小问题开始,构造高为n,所有非叶结点的平衡因子均为1的图示。如下表
PS:为了简化问题,我们只画出满足条件的图示的一种即可。
图示 | 高度(n) | H(n)的节点个数 |
1 | H(1)=1 | |
2 | H(2)=2 | |
3 | H(3)=4 |
问题关键:所有非叶结点的平衡因子均为1
所以,我们可以发现,一个非叶子节点的左子树和右边子树的高度差必须是1或-1,我们以左子树高度-右子树高度=1为例。
容易发现,树的高度n>=3的时候
H(n)=根节点数+左子树节点数+右子树节点数
也就是下面的递推公式:
然后,知晓递推公式的通项公式:
H(1)=1;
H(2)=2;
H(n)=1+H(n-1)+H(n-2);(n>=3)
如上,如果是编程题可以写代码,还可以用“滚动数组”优化,如果是选择/填空题,就只能像下面一样
一步步递推:
H(3)=1+H(2)+H(1)=1+2+1=4;
H(4)=1+H(3)+H(2)=1+4+2=7;
H(5)=1+H(4)+H(3)=1+7+4=12;
H(6)=1+H(5)+H(4)=1+12+7=20;
选B