Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

итератор для обхода по бинарному дереву - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Магический квадрат) http://www.cyberforum.ru/cpp-beginners/thread257425.html
Определить, является ли заданная квадратная матрица порядка n магическим квадратом, т.е. матрицей, у которой суммы элементов строк и столбцов одинаковы.
C++ Не хочет работать Rand Здравствуйте, при выполнении лабораторной работы столкнулся с некоторыми трудностями: При запуске программы она доходит до функции ran и останавливается #include <iostream> #include <stdlib.h>... http://www.cyberforum.ru/cpp-beginners/thread257422.html
табулирование функций C++
Составить программу для вычисления значений функции F(x) на отрезке с шагом h.Результат представить ввиде таблицы,первый столбец которой-значение аргумента, второй-соответствующее значение...
C++ Изъятие информации в файле из скобок
Здравствуйте.Помогите пожайлуста. Нужно написать программу на C++ которая из файла .txt выводит на экран только то что написано внутри {} таких скобок.Внутри таких скобок есть еще кадратные скобки...
C++ Полустатика в с++ http://www.cyberforum.ru/cpp-beginners/thread257391.html
В универе задали полустатические структуры - стек, дек, очередь. описать описал, а дальше.... такие вопросы возникли: как проверить очередь на полноту? как добавлять и удалять элементы в этих...
C++ Простейшие циклы С Помогите ЛюДи !!!! в СрочНяк... дано натуральное число n. вычислить подробнее

Показать сообщение отдельно
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3

итератор для обхода по бинарному дереву - C++

14.03.2011, 22:00. Просмотров 1687. Ответов 4
Метки (Все метки)

Кхм. Попытался реализовать итератор для обхода по бинарному дереву...
Наткнулся на запару. Дерево должно быть обязательно круговым, чтобы по нему можно было использовать нормальный итератор?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
template<class T>
class Tree<T>::Tree_Iterator
{
public:
    Tree_Iterator():curr(0)
    {
    }
    Tree_Iterator(Node* curr_):
        curr(curr_)
    {
    }
    T& operator *() 
    {
        return curr->elem;
    }
    const T& operator *() const
    {
        return curr->elem;
    }
    Tree_Iterator operator ++()
    {
        Inc();
        return Tree_Iterator(curr);
    }
    bool operator ==(const Tree_Iterator& sec)
    {
        return curr == sec.curr;
    }
    bool operator !=(const Tree_Iterator& sec)
    {
        return !(*this == sec);
    }
private:
    Node* curr;
 
    std::stack<Node*> nodes;
    std::stack<Node*> for_reverse;
 
    void Inc()
    {
        while(curr)
        {
            nodes.push(curr);
            for_reverse.push(curr);
            curr=curr->_left;
            if(curr)
                return;
        }
        if(nodes.empty())
            return;
        while(!curr)
        {
            curr=nodes.top();
            nodes.pop();
            curr=curr->_right;
            if(curr)
                for_reverse.push(curr);
        }
    }
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    Node* find_max_right()
    {
        while(curr)
            curr=curr->_right;
        return curr;
    }
    iterator begin()
    {
        return iterator(curr);
    }
    iterator end()
    {
        return iterator(find_max_right());
    }
При end соответственно все плохо. Ибо идет ошибка, т.к. find_max_right возвращает ноль. В то же время если в find_max_right поставить while(curr->right) - последний элемент остается за бортом...
Как тут лучше всего сделать, чтобы обойтись меньшими жертвами? Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru