Форум программистов, компьютерный форум 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
15.03.2011, 03:35  [ТС]     итератор для обхода по бинарному дереву
Это единственное предложение? Со стеками шаманить не вариант?

Добавлено через 2 часа 53 минуты
Чуть не убился с этим.
Вот что вышло в итоге.

Добавил в Node

C++
1
2
        Node* _parent;
        bool isChecked;
Исправил функцию.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        void insert_helper(T val)
        {
            if(val <= elem && _left)
                _left->insert_helper(val);
            else if(val <= elem && !_left)
            {
                _left=new Node(val);
                _left->_parent=this;
            }
            else if(val > elem && _right)
                _right->insert_helper(val);
            else
            {
                _right=new Node(val);
                _right->_parent=this;
            }
        }
C++
1
2
3
4
5
6
7
8
9
10
11
12
    void insert(T val)
    {
        if(!curr)
        {
            curr=new Node(val);
            curr->_parent=new Node;
            curr->_parent->_left=curr;
            curr->_parent->_right=curr;
        }
        else
            curr->insert_helper(val);
    }
C++
1
2
3
4
5
6
7
8
    iterator begin()
    {
        return iterator(find_max_left(curr));
    }
    iterator end()
    {
        return iterator(curr->_parent);
    }
C++
1
2
3
4
5
6
7
    Node* find_max_left(Node* tree_node)
    {
        if(tree_node->_left)
            return find_max_left(tree_node->_left);
        tree_node->isChecked=true;
        return tree_node;
    }
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
    void Inc()
    {
        int linkCnt=0;
        while(curr->_left)
        {
            if(curr->_left->isChecked)
                break;
            curr=curr->_left;
            ++linkCnt;
        }
        if(linkCnt)
        {
            curr->isChecked=true;
            return;
        }
        else
        {
            while(curr->_parent)
            {
                if(curr->_right)
                    if(!curr->_right->isChecked)
                        break;
                curr=curr->_parent;
            }
        }
        if(curr->_right && !curr->_right->isChecked)
            curr=curr->_right;
        linkCnt=0;
        while(curr->_left && !curr->_left->isChecked)
        {
            curr=curr->_left;
            ++linkCnt;
        }
        if(linkCnt)
        {
            curr->isChecked=true;
            return;
        }
        while(curr->_right && !curr->_right->isChecked)
            curr=curr->_right;
        curr->isChecked=true;
        return;
    }
 
Текущее время: 11:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru