寻找完美四叉树的大小

时间:2011-01-30 23:38:14

标签: c++ tree size binary-tree quad

我需要找到一个完美的四叉树的大小。 这意味着我有1个根节点,它分成4个节点,分成4个节点等。

所以高度为1的四叉树的大小为1 高度2 =大小5(1 + 4) 身高3 = 21岁(1 + 4 + 16) 高度4 =大小85(1 + 4 + 16 + 64)

等。

我知道可以找到完美二叉树的大小:size = 2 ^(height + 1)-1 所以我认为四叉树存在类似的方程式。

那是什么?

3 个答案:

答案 0 :(得分:3)

这是geometric series。所以相关的公式是:

S = a * (1 - r^n) / (1 - r)

其中a是第一个值,r是公共比率,n是术语数,^表示“权力” ”

答案 1 :(得分:3)

对于四叉树,算法

((4^depth)-1)/3

例如深度为3,

(64-1)/3 = 21

如果算上三层,你会得到

1 + 4 + 16 = 21

在我的实现中,我甚至把它分成了两个数组 不离开节点的所有节点的大小为

((4^(depth-1))-1)/3

并留下节点

4^(depth-1)

我在编译时使用pow的元编程和深度的模板参数进行这些计算。所以我只是将节点分配到两个数组中。

答案 2 :(得分:0)

以防任何人需要代码示例(在swift3中)

public func tileCount(forLevelRange levelRange: Range<UInt>) -> UInt64 {

   var tileCount: UInt64 = 0
   for level in levelRange.lowerBound ..< levelRange.upperBound {
       tileCount += UInt64(pow(Double(1 << level), 2) )
   }

   return tileCount
}