2016-03-14 5 views
0

У меня есть синтаксического дерева где каждый узел является объектом TrieNode как это:Высота синтаксического дерева (количество уровней)

public char content; 
public double count; 
public LinkedList<TrieNode> childList; 

я должен был рассчитывать высоту синтаксического дерева (корень имел уровень = 0).

Так вот что я сделал:

int levels = getLevels(getRoot()); 
System.out.println("levels: " + levels); 

public int getLevels(TrieNode node) { 
    int lev = 0; 
    if(node != null) { 
     TrieNode current = node; 
     for(TrieNode child : node.childList) { 
      lev += getLevels(child); 
     }  
    } 
    return lev; 
} 

Но всегда возвращает 0. Почему? Спасибо

ответ

0

Вам нужно добавить 1, когда вы спускаетесь к детям, в противном случае ничего не дает lev ненулевое значение.

Обратите внимание, что вы не вычисляете the height of the trie в этом коде, вы суммируете длины путей. Вы должны найти максимальную длину пути:

int lev = 1; 
for (TrieNode child : node.childList) { 
    lev = Math.max(lev, 1 + getLevels(child)); 
} 
+0

Спасибо, вы были быстро. – ComeDown

Смежные вопросы