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,则没有值