我需要递归地找到二叉树的平均值。
这个伪代码好吗?
avg (T)
if (|T| = 1)
return value
sumleft = sumleft + avg(Tleft)
sumright = sumright + avg(Tright)
sum = value + sumleft + sumright
return sum / (|Tleft| + |Tright| +1)
答案 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|