如何找到树的最小高度?

时间:2014-02-13 18:59:46

标签: data-structures tree height children minimum

树中节点的扇出定义为节点具有的子节点数。树的扇出被定义为树中任何节点的最大扇出。假设树T具有n个节点并且扇出f> 1。 1. T的最小可能高度是多少?

我不知道如何开始这个问题。我解决了第一部分,即在高度h和扇出f>方面找到可以是T的最大节点数。我得到了(f ^(h + 1)-1)/(f-1)。我想你可以用它来解决上面的问题。有人可以指点我正确的方向吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我会通过扭转它并尝试找到可以在具有给定高度和扇出T_max(h,f)的树中打包的最大节点数来解决此问题。这样,保证每个其他树T(h,f)具有与T_max(h,f)一样多或更少的节点。因此,如果您找到T_max(h,f),那

total_nodes( T_max(h,f) ) > n > total_nodes( T_max(h-1,f))

h将保证是n个节点和f扇出的树的最小高度。

为了找到这样的树,您需要最大化树的每一层中的节点数。换句话说,这种树的每个节点都需要扇出f,不能少。因此,您开始在树中插入节点,一次一个级别。图层填满后,您开始添加另一个图层。在这样的树中插入n个节点后,您将停止并检查树的高度。这将是您要寻找的最小高度。

或者,您可以改为计算:

nodes_in_level(1) = 1
nodes_in_level(2) = f
nodes_in_level(3) = f * f
...
nodes_in_level(x) = f ^ (x - 1)

这是标准geometric progression。因此,具有高度x和扇出f的给定树的最大节点是这种几何级数的总和,并且找出最小的x应该不会太麻烦。 ,节点数大于n