找到二叉树的高度有很多;如何在Java中找到n-ary树的高度?它是否涉及遍历它并跟踪最大深度或类似的东西?
答案 0 :(得分:1)
实际找到高度的N-ary树的高度与其他任何类型的树没有什么不同。叶节点的高度为0,非叶节点的高度比其子节点的高度高一个。
在伪代码中有一个递归函数在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;
}
}
答案 1 :(得分:0)
我这次聚会晚了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。)每个通话将填充到整个末尾以构成整个图片的小拼图块?
无论如何,希望能帮助未来的人们解决这个问题。