Java:查找N元树的高度

Java:查找N元树的高度,java,tree,height,Java,Tree,Height,在寻找二叉树的高度方面有很多方法;如何在Java中找到n元树的高度?是否需要遍历它并跟踪最大深度或类似的东西?查找N元树的高度实际上与任何其他类型的树没有什么不同。叶节点的高度为0,而非叶节点的高度比其最高的子节点高1 有一个递归函数,它在伪代码中在Java中执行此操作: public static int getHeight(Node n){ if(n.isLeaf()){ return 0; }else{ int maxDepth = 0;

在寻找二叉树的高度方面有很多方法;如何在Java中找到n元树的高度?是否需要遍历它并跟踪最大深度或类似的东西?

查找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;
    }
}

我迟到了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;
}
基本提示

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

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

所以有两件事:

1.)此功能的目标是什么?真正理解您想要从函数中得到什么

2.)每次通话结束时,为了形成一幅完整的画面,每个电话都会填满的小拼图是什么


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

如果你不想平衡树的形状,唯一的变化就是在单独的变量中存储一些最大深度
if (node.children.size() == 0) {
    return 1;
}