我尝试编写一个名为getHeight()
的方法来计算N-ary树的高度。我的尝试不起作用。这是我正在使用的树接口:
public interface MyTree {
Tree getSubTree(int i) ;//returns a subtree
boolean isLeaf() ;//returns true if the node is a leaf
int getDegree() ;
}
这是我写过的一段代码:
public int getHeight(){
for(int i = 0 ; i<getDegree()-1 ; ++i){
if(isLeaf()){
return 0;
}else{
return 1 + Math.Max(getSubtree(i).getHeight() , getSubtree(i+1).getHeight() ;
}
}
}
如何修复此方法?
答案 0 :(得分:5)
您的问题在这里:
return 1 + getSubtree(i).getHeight();
一旦计算出1 +单个子树的高度,就会从该方法返回。您实际需要做的是在每个子树上调用getHeight()
,并返回1 +每个子树的最大值。 (如果你的树有任何平衡属性,这可以简化。)
例如,如果您正在调用此树的树有三个子树,高度为2,4和5,则代码将在第一个子树上调用getHeight()
并查看2,然后立即返回3,而不是检查剩余子树上的getHeight()
,发现有一个较高的子树(高度为5的子树)。