递归地找到二进制树值的平均值伪代码

时间:2014-12-11 15:05:40

标签: recursion binary-tree average pseudocode

我需要递归地找到二叉树的平均值。

这个伪代码好吗?

avg (T)
if (|T| = 1)
    return value
sumleft = sumleft + avg(Tleft)
sumright = sumright + avg(Tright)
sum = value + sumleft + sumright
return sum / (|Tleft| + |Tright| +1)

2 个答案:

答案 0 :(得分:0)

不,代码不正确。在递归调用中,被调用者返回[*] 平均值,而调用者将其视为 sum

[*]嗯,如果它是正确的,那就不是。

答案 1 :(得分:0)

正如NPE所说,代码是不正确的,因为函数返回一个平均值,调用者将其视为一个总和。对伪代码的一个简单修复是:

avg(T) =
  if (|T| = 1)
    return value
  sumleft  = |Tleft | * avg(Tleft )
  sumright = |Tright| * avg(Tright)
  sum = value + sumleft + sumright
  return sum / (|Tleft| + |Tright| + 1)

您需要确保avg的结果不是整数,因为除法可能会导致许多舍入错误。这里的代码更好,更不容易出现舍入错误:

sum(T) =
  if (|T| = 1)
    return value
  return sum(Tleft) + value + sum(Tright)
avg(T) =
  return sum(T) / |T|