Построение полного бинарного дерева дано только по порядку?

Просто добавьте что-то примечательное здесь.


myQueue.hpp:

template <class T> 
class QueueA {
    int size;
    ...
public:
    template <class T> T dequeue() {
       // implementation here
    }

    bool isEmpty();

    ...
}    

myQueue можно определить методы шаблонного класса, которые просто прекрасны в файле реализации. cpp:

// implementation of regular methods goes like this:
template <class T> bool QueueA<T>::isEmpty() {
    return this->size == 0;
}


main()
{
    QueueA<char> Q;

    ...
}
2
задан mttrns 3 March 2019 в 18:26
поделиться

1 ответ

В вашем коде есть некоторые проблемы:

  • вы должны использовать ungetc() вместо fseek() для возврата на один символ, чтобы избежать сбоя в потоках, которые не поддерживают поиск.

  • вы должны написать (check == '(') вместо жесткого кодирования значения символа ASCII. Это и более портативный и более читаемый.

  • Чтобы избежать неопределенного поведения, вы должны проверить EOF и fscanf() успешный анализ. На самом деле, это позволило бы избежать необходимости теста на check.

  • Когда вы анализируете листовой узел, вы не должны рекурсировать и анализировать дополнительные узлы ниже текущего.

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

Вот модифицированная версия:

Node *constructTreeHelper(FILE *infile, int *index) { 
    double lwire, rwire;
    int sink;
    double cap;
    Node *node;

    // Base case 
    if (*index <= 0) {
        // This test seems redundant with the file contents */
        return NULL; 
    }

    // this fscanf will fail on the byte byte if it is not a '('
    if (fscanf(infile, " (%le %le)", &lwire, &rwire) == 2) {
       // If the node is not a leaf node
        node = createNode(0, 0, lwire, rwire);
        *index -= 1;
        node->right = constructTreeHelper(infile, index); 
        node->left = constructTreeHelper(infile, index); 
    } else if (fscanf(infile, "%d(%le)\n", &sink, &cap) == 2) {
        // If the node is a leaf node
        node = createNode(sink, cap, 0, 0);
        *index -= 1;
    } else {
        // invalid format or end of file */
        node = NULL;
    }
    return node;
} 
0
ответ дан chqrlie 3 March 2019 в 18:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: