N树的高度

时间:2013-12-31 18:50:45

标签: java data-structures

我尝试编写一个名为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() ; 
        }
    }
}

如何修复此方法?

1 个答案:

答案 0 :(得分:5)

您的问题在这里:

 return 1 + getSubtree(i).getHeight(); 

一旦计算出1 +单个子树的高度,就会从该方法返回。您实际需要做的是在每个子树上调用getHeight(),并返回1 +每个子树的最大值。 (如果你的树有任何平衡属性,这可以简化。)

例如,如果您正在调用此树的树有三个子树,高度为2,4和5,则代码将在第一个子树上调用getHeight()并查看2,然后立即返回3,而不是检查剩余子树上的getHeight(),发现有一个较高的子树(高度为5的子树)。