Двоичное дерево поиска - уникальные значения в C ++ - PullRequest
0 голосов
/ 24 ноября 2018

Проект заключается в добавлении слов в каждый узел в BST.Мне нужно посчитать количество уникальных или уникальных значений в моем BST.

Вот мой код для добавления слов.Мне нужна помощь с написанием int DifferentWords () const ;.

void WordTree:: addPrivate(WordNode *n, ItemType v)
{
    if (root == NULL)
        root = new WordNode(v);
    else if (v == n->m_data)
    {
        n->m_count++;
    }
    else if (v < n->m_data)
    {
        if (n->m_left != NULL)
        {
            addPrivate(n->m_left, v);
        }
        else
        {
            n->m_left = new WordNode(v);
        }
    }
    else if (v > n->m_data)
    {
        if (n->m_right != NULL)
        {
            addPrivate(n->m_right, v);
        }
        else
        {
            n->m_right = new WordNode(v);
        }
    }

}

1 Ответ

0 голосов
/ 24 ноября 2018

С этим деревом это то же самое, что и число узлов.

Определение количества узлов рекурсивно:

  • Если дерево пустое, у него нет узлов.
  • Если он не пустой, он имеет на один узел больше, чем сумма количества узлов в поддеревьях.

В C ++,

int distinctWords(const WordNode* node)
{
    return node == nullptr 
           ? 0 
           : 1 + distinctWords(node->m_left) + distinctWords(node->m_right);
}
...