确定树结构中所有节点值的平均值

Determine average of all Node values within a Tree Structure

鉴于此界面...

public static interface Node 
{
    int getValue();
    List<Node> getChildren();
}

执行以下方法return树中所有节点值的平均值。

public static double getAverage(Node root) 
{
}   

我很难解决这个练习题,有几个问题。

  1. 我假设最好使用递归来完成,对吗?
  2. 如果没有辅助方法或全局变量,这可能吗?
  3. 这是否可以不必遍历树两次? (一次用于节点总和,一次用于节点计数)

此外,如果有人可以提供一些伪代码,我将不胜感激。

  1. 你可以使用递归,但没有它也可以解决这个问题。您需要的只是深度优先搜索。您可以使用堆栈迭代实现它。

  2. 是的,这是可能的。带有堆栈的版本不需要任何额外的方法。

  3. 是的,这是可能的。您可以在一次遍历期间只计算这两个值。

下面是一个非递归实现的伪代码:

valuesSum = 0
nodesCount = 0
stack = new Stack
stack.add(root)
while (!stack.isEmpty())
    Node v = stack.poll()
    nodesCount++
    valuesSum += v.getValue()
    for (child : v.getChildren())
        stack.add(child)
return valuesSum / nodesCount