Java 获取具有多个子树的树的高度

Java 获取具有多个子树的树的高度,java,Java,我很难完成这个算法来计算一棵有多个子树(不是二进制树)的高度 有人知道哪里出了问题吗 private int getHeight(Node<T> root, int height, int result){ if (root.getChildren().size()==0) { return height; } height++; //Iterate every child f

我很难完成这个算法来计算一棵有多个子树(不是二进制树)的高度

有人知道哪里出了问题吗

private int getHeight(Node<T> root, int height, int result){

        if (root.getChildren().size()==0) {
            return height;
        }
        height++;

        //Iterate every child
        for (Node<T> childNode  : root.getChildren()) {

            //Get the height again
            height =getHeight(childNode, height, result);

            //Update if new high result
            if (height>result) {
                result = height;
            }

            height = 0;
        }

        //Return highest point
        return result;
    }
private int-getHeight(节点根、int-height、int-result){
if(root.getChildren().size()==0){
返回高度;
}
高度++;
//迭代每个孩子
对于(Node-childNode:root.getChildren()){
//重新获得高度
高度=getHeight(子节点、高度、结果);
//如果出现新的高结果,则更新
如果(高度>结果){
结果=高度;
}
高度=0;
}
//返回最高点
返回结果;
}

通过添加“高度”和“结果”参数,您的操作变得更加困难

在函数中,找到每个孩子的身高。保留最大的。返回最大值的1+高度

像这样的东西(未经测试,未编译):

private int getHeight(节点根){
int max=0;
对于(Node-childNode:root.getChildren()){
int height=getHeight(childNode);
如果(高度>最大值)
最大值=高度;
}
返回最大值+1;
}

计算身高的方法非常笨拙,可能会有很多地方出错,比如在身高上加一个,然后得到孩子的身高

我建议做一个更简单的递归函数,与您正在做的类似

首先,您可以去掉第二个和第三个参数,然后您可以更改代码,使其看起来更像这样:

private int getHeight(Node<T> root){

    if (root.getChildren().size()==0) {
        return 1;
    }

    int height;
    //Iterate every child
    for (Node<T> childNode  : root.getChildren()) {

        //Get the height again
        int childHeight = getHeight(childNode);

        //Update if new high result
        if (childHeight>height) {
            height = childHeight;
        }
    }

    //Return highest point
    return height + 1;
}
private int getHeight(节点根){
if(root.getChildren().size()==0){
返回1;
}
内部高度;
//迭代每个孩子
对于(Node-childNode:root.getChildren()){
//重新获得高度
int childHeight=getHeight(childNode);
//如果出现新的高结果,则更新
如果(儿童身高>身高){
身高=儿童身高;
}
}
//返回最高点
返回高度+1;
}
如果节点没有子节点,则只返回1。否则,它将获取所有子项的最大高度,并返回该数字加1

private int getHeight(Node<T> root){

    if (root.getChildren().size()==0) {
        return 1;
    }

    int height;
    //Iterate every child
    for (Node<T> childNode  : root.getChildren()) {

        //Get the height again
        int childHeight = getHeight(childNode);

        //Update if new high result
        if (childHeight>height) {
            height = childHeight;
        }
    }

    //Return highest point
    return height + 1;
}