Подсчет листового узла в дереве - PullRequest
0 голосов
/ 07 мая 2018

Я хочу посчитать, сколько конечных узлов в структуре дерева, подсчитав, сколько слов в дереве, но мой код не обновляет значение подсчета, вместо этого он всегда сбрасывается обратно в 0.

int num = 0;
public int countLeafNodes() {
    for (char c : children.keySet()) {
        Trie node = children.get(c);
        System.out.println(c);
        if (node.isWord) {
            num++;
            System.out.println(num);
        }
        node.countLeafNodes();
    }
    return num;
    }

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Похоже, проблема в том, что когда вы возвращаетесь из своей рекурсии, вы не принимаете во внимание возвращаемые значения. Я имею в виду, что при подсчете листовых узлов у детей вы не добавляете эту сумму к родителям. Если это проблема, вам просто нужно изменить

node.countLeafNodes();  

до

num += node.countLeafNodes();
0 голосов
/ 07 мая 2018

Вы игнорируете значение, возвращаемое рекурсивным вызовом (node.countLeafNodes()).

Попробуйте:

public int countLeafNodes() 
{
    int num = 0;
    for (char c : children.keySet()) {
        Trie node = children.get(c);
        System.out.println(c);
        if (node.isWord) {
            num++;
            System.out.println(num);
        }
        num += node.countLeafNodes();
    }
    return num;
}
...