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

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

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

Показать сообщение отдельно
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.03.2011, 22:00     итератор для обхода по бинарному дереву
Кхм. Попытался реализовать итератор для обхода по бинарному дереву...
Наткнулся на запару. Дерево должно быть обязательно круговым, чтобы по нему можно было использовать нормальный итератор?

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) - последний элемент остается за бортом...
Как тут лучше всего сделать, чтобы обойтись меньшими жертвами? Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru