Recursion 递归查找二叉树值的平均值伪代码

Recursion 递归查找二叉树值的平均值伪代码,recursion,binary-tree,average,pseudocode,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) 不,代码不正确。在递归调用中,被调用方返回[*]平均值,而调用方将其视为总和 [*]好吧,如果它是正确的

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

这个伪代码行吗

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

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


[*]好吧,如果它是正确的,它会是正确的,但它不是。

正如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|

如果| T |=0,则没有值