如何在C中找到特里树的高度

时间:2014-11-27 02:14:54

标签: c tree height trie radix

我无法编写算法来查找特里树的高度。我没有想法如何开始或如何做到这一点。对不起,如果这是一个' noob'问题,但我尝试新手,这是我的任务中唯一缺少的部分。

无论如何这里是特里树的结构:

typedef struct RegTrie * ImplTrie;
typedef struct RegTrie {
  Boolean IsItAWord; /* true if it is a word, false if it is not a word */
  ImplTrie children[ALPHABETsize];
} RegTrie;

所以基本上,如果' a'是一个孩子,孩子会有一个特里[0],如果' b'不是孩子,孩子[1]会是NULL。正如您所看到的,字符是由链接索引隐式定义的,如果过去节点的字符形成一个字直到当前节点,布尔IsItAWord'将是真的。

你可以告诉我这个吗?我唯一知道的是,高度可以用最长的单词+ 1的长度来定义。但我不知道该怎么做。我真的只是想要一个解决方案,所以任何找到这个特里的高度的方法都将非常感激。

谢谢。

1 个答案:

答案 0 :(得分:5)

您可以使用递归ImplTrie并返回int的递归函数来执行此操作。

基本案例检查ImplTrie是否为NULL,在这种情况下,函数返回0

否则,该函数循环遍历children,调用自身,选择最大值,并返回最大值加1。

int height(ImplTrie t) {
    if (!t) return 0;
    int res = 0;
    for (int i = 0 ; i != ALPHABETsize ; i++) {
        int h = height(t->children[i]);
        if (h > res) {
            res = h;
        }
    }
    return res + 1;
}