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

时间:2015-02-20 19:56:44

标签: java recursion tree

鉴于此界面...

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

实现以下方法以返回树中所有节点值的平均值。

public static double getAverage(Node root) 
{
}   

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

  1. 我认为最好用递归来完成,这是正确的吗?
  2. 如果没有辅助方法或全局变量,这可能吗?
  3. 这可能无需遍历树两次吗? (一次用于节点求和,一次用于节点计数)
  4. 此外,如果有人可以提供一些假代码,我会非常感激。

1 个答案:

答案 0 :(得分:1)

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

  2. 是的,有可能。具有堆栈的版本不需要任何其他方法。

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

  4. 这是非递归实现的伪代码:

    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