此问题中balanced
的定义是
左子树中的节点数和其中的节点数 右子树几乎相等,这意味着它们的区别不大 大于一个
如果总节点数为n
,那么这些树有多少?
如果我们将the number of nodes
替换为height
,该怎么办?给定height
,有多少高度平衡的树木?
答案 0 :(得分:3)
差异只会由最后一个级别进行,因此您可以找到应该为该区域留下多少个节点,并考虑所有可能的组合。拥有n
个节点,您知道高度应为floor(log(n))
,因此深度为k = floor(log(n)) - 1
的同一棵树是完全平衡的,因此您知道需要(m = sum(i=0..k)2^i
)个节点,因此n-m
个节点留给最后一级。平衡二叉树的一些定义强制“所有节点都要左对齐”,在这种情况下显然只有一种可能性,没有这种约束,你有2^floor(log(n))
选择n-m
的组合,因为您必须选择要为节点分配的2^floor(log(n))
个可能的插槽,强制分配总共n-m
个节点。
对于高度故事,您考虑2^floor(log(n))
选择i
的组合总和,i
从1到2^floor(log(n))
。你考虑在最后一级有1个节点,然后是2等等的所有可能性,直到你没有使它成为一个完全平衡的二叉树,因此分配了所有2^floor(log(n))
个槽。