【问题标题】:Java: Find Height of N-ary TreeJava:查找 N 叉树的高度
【发布时间】:2013-12-03 17:22:24
【问题描述】:

找到二叉树的高度有很多;如何在 Java 中找到 n 叉树的高度?它会涉及遍历它并跟踪最大深度或类似的东西吗?

【问题讨论】:

  • 如果你没有将树平衡成某种形状 - 唯一的变体是将一些最大深度存储在单独的变量中

标签: java tree height


【解决方案1】:

实际上,对于 N 叉树,查找高度与查找任何其他类型的树没有什么不同。叶节点的高度为 0,非叶节点的高度比其最高的子节点高 1。

有一个递归函数,用伪代码在 Java 中执行此操作:

public static int getHeight(Node n){
    if(n.isLeaf()){
         return 0;
    }else{
        int maxDepth = 0;

        foreach(Node child : n.getChildren()){
            maxDepth = Math.max(maxDepth, getHeight(child));
        }

        return maxDepth + 1;
    }
}

【讨论】:

    【解决方案2】:

    我迟到了 4 年零 9 个月,但我认为上面的伪代码非常正确,但是:

    if(n.isLeaf()){
         return 0;
    }
    

    应该是:

    if(n.isLeaf()){
         return 1;
    }
    

    以下是该问题的有效解决方案:

    public int dfsForMaxDepth(Node node) {
    
        if (node == null) {
            return 0;
        }
    
        if (node.children.size() == 0) {
            return 1;
        }
    
        int maxDepth = 0;
    
        for (int i = 0; i < node.children.size(); i++) {
            maxDepth = Math.max(maxDepth, dfsForMaxDepth(node.children.get(i)));
        }
    
        return maxDepth + 1;
    }
    

    基本情况 1

    如果根为空,则最大深度为 0。

    基本案例 2

    如果节点没有子节点(是叶子),那么该节点的高度就是 1。

    递归案例

    如果节点确实有子节点,我们会找到其所有子节点的最大深度并“竞争”所有这些结果,最后从所有子节点返回“获胜”最大深度并计算节点我们在。

    可以删除基本情况 2,因为如果节点没有子节点,那么 for 循环将永远没有任何“空间”可以运行,只会返回 maxDepth + 1,但由于没有搜索的 maxDepth 是 0,0 + 1 = 1这给了你与逻辑相同的东西:

    if (node.children.size() == 0) {
        return 1;
    }
    

    基本技巧

    树问题可能会令人困惑,因为我们尝试做的太多。我们尝试存储递归应该为我们处理的额外状态,或者我们只是过度考虑需要发生的事情。

    关键是你让递归完成繁重的工作,只考虑“这里需要发生什么。这个节点需要发生什么。” (当然,在生产环境中,您通常会将递归 DFS 转换为具有类似堆栈结构的迭代解决方案,因为您可能会受到系统内存的限制,但递归解决方案更优雅,更容易在面试中看到)

    所以这是两件事:

    1.) 这个函数的目标是什么?真正了解你想从函数中得到什么

    2.) 每个调用将填充的小拼图是什么,以形成整个画面?

    无论如何,希望能帮助未来的人解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-07
      • 2013-12-17
      • 2011-02-05
      相关资源
      最近更新 更多