【问题标题】:How can I count the highest level in a tree with recursion?如何使用递归计算树中的最高级别?
【发布时间】:2012-10-07 21:49:58
【问题描述】:

所以任务来了。 我们有一个类,叫 NODE,实例是“node”。 这个节点有很多孩子,这些孩子也有很多孩子,等等。 我如何计算这棵树中的最高级别? 等:

  • 节点 -> child1 -> child1.1 -> child1.1.1,child 1.1.2 -> child1.1.2.1
  • 节点 -> child2
  • 节点 -> child3 -> child3.1, child3.2 -> child3.2.1

这棵树的最高层级,为4(child1.1.2.1的层级,节点的层级为0) 请帮我! 我知道,我应该使用递归方法,但我不知道如何,如果有人可以解决这个问题,并编写代码......请...... 谢谢你! 该方法应以:

开头
public int maxLevel(NODE node){...

【问题讨论】:

  • 所以每个Node 都持有其他Nodes 的数组?
  • 您能展示一下您的 NODE 类的代码吗?将其命名为“Node”可能会更好——类名全大写很奇怪。

标签: java recursion tree parent-child


【解决方案1】:

此方法为基本情况(有 0 个孩子)返回 1 级:

public int maxLevel() {
    int maxChildLevel = 0;
    for (Node child : children) {
        maxChildLevel = Math.max(maxChildLevel, child.maxLevel());
    }
    return maxChildLevel + 1;
}

此示例旨在将maxLevel 声明为Node 的实例方法,因此无需将Node 作为参数。

【讨论】:

  • 那也不错吗? “public int maxLevel(Node node)”,for 为“for(Node child: node.children){ maxChildLevel = Math.max(maxChildLevel, maxLevel(child));...”
  • @victorio 这也行得通,但如果它采用Node,而不是在Node 上调用的实例方法,该方法似乎是static
  • 你怎么能对级别求和?你能写一个简单的代码吗?
  • @victorio 这是一个不同的问题,但你应该能够通过应用你所学到的关于递归的知识自己弄清楚。
【解决方案2】:

你可以试试这样的:

public static int maxLevel(Node node) {
    if (node.children.length == 0) return 1;

    int max = maxLevel(node.children[0]);
    for (int i = 1 ; i < node.children.length ; i++) {
        int n = maxLevel(node.children[i]);
        if (n > max) max = n;
    }

    return max + 1;
}

其中node.children 是由node 的子节点组成的数组。

【讨论】:

  • 谢谢!你怎么能总结水平?你能写一个简单的代码吗?
猜你喜欢
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多