给定数n,有多少平衡二叉树(不是二叉搜索树)?

时间:2014-02-21 10:34:33

标签: algorithm data-structures tree binary-tree binary-search-tree

此问题中balanced的定义是

  

左子树中的节点数和其中的节点数   右子树几乎相等,这意味着它们的区别不大   大于一个

如果总节点数为n,那么这些树有多少?


如果我们将the number of nodes替换为height,该怎么办?给定height,有多少高度平衡的树木?

1 个答案:

答案 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))个槽。