Java:查找N元树的高度
在寻找二叉树的高度方面有很多方法;如何在Java中找到n元树的高度?是否需要遍历它并跟踪最大深度或类似的东西?查找N元树的高度实际上与任何其他类型的树没有什么不同。叶节点的高度为0,而非叶节点的高度比其最高的子节点高1 有一个递归函数,它在伪代码中在Java中执行此操作: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;
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;
}