获得有多个孩子的树的高度

时间:2013-09-14 01:59:42

标签: java

我很难完成这个算法来找到有多个孩子(不是二进制)的树的高度。

任何人都知道这出错了吗?

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;
    }

2 个答案:

答案 0 :(得分:1)

通过添加高度和结果参数,您将变得更加困难。

在该功能中,找到每个孩子的身高。保持最大。返回1 +最大的高度。

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

private int getHeight(Node<T> root){

    int max = 0;
    for (Node<T> childNode  : root.getChildren()) {
        int height = getHeight(childNode);
        if (height > max)
            max = height;
    }
    return max + 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;
}

如果节点没有子节点,则返回1。否则,它获取所有子项的最大高度并返回该数字加1。