一般树 - 非二元高度

时间:2014-09-11 21:56:56

标签: c++ tree height

抱歉我的英语不好。不是我原来的语言。

我的问题是我想知道一般树的高度,我不知道这是用英语调用的。

树的结构是:

struct GTnode{
    int data;
    nodeGT *fc; //first child
    nodeGT *nb; //next brother
}

每个下一个兄弟与第一个孩子处于同一水平,每个第一个孩子都有+1级。

这是我的代码,但我不确定是否正确:

int height(GT *root){
    if(root == null){
        return 0;
    }
    else{
        int max=0;
        int h;
        h = height(root->fc);
        if(h > max){
            max = h;
        }
        max = max + 1;
        h = height(root->nb);
        if(h > max){
           max = h;
        }
        return max;
    }
}

2 个答案:

答案 0 :(得分:2)

您的代码似乎没问题。我会让它更紧凑:

#include <algorithm>

int height(GT *root) {
    return root ? std::max(height(root->fc) + 1, height(root->nb)) : 0;
}

答案 1 :(得分:0)

我只看到一个问题:你没有检查是否有孩子或兄弟。

当然,这有点冗长。我按如下方式编写代码:

int GTnode::height()
{
    int hb = fb ? height(fb) : 0;
    int hc = fc ? height(fc) : 0;
    return std::max(hb, hc+1);
}