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

"Рекурсивная функция" (Обход бинарного дерева) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Расположить столбцы матрицы в соответствии с ростом характеристик http://www.cyberforum.ru/cpp-beginners/thread102248.html
"Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов. Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик" можете помочь с этим задачом?
C++ [Геометрия]Скалярное произведение векторов Добрый день. Есть вот такая задача: Даны векторы a и b Найти длины этих векторов, их скалярное произведение, а также косинус угла между ними. Предусмотреть возможность ввода данных пользователем, а также получение инструкций (справки) по использованию формул для вычислений. Я написал программу, но не уверен верно ли написал. #include <iostream.h> http://www.cyberforum.ru/cpp-beginners/thread102245.html
C++ Два потока в одной программе
Две фунцкии одной программы оформить как две функции потока. После ввода значений запускаются два требуемых потока, а потом на экран выводится полученные значения. Все функции я написал, работает программа. Не могу понять, как создать 2 потока через CreateThread, а закрыть его еще сложнее т-т Псевдокод: <ввод параметров> *создание потока* -работае кусок программы в потоке...
C++ Как умножить числа…
Доброй ночи Господа! Помогите мне как начинающему программисту умножить два крупных числа, очень надо, вот код (пример): #include "stdafx.h" // #include <iostream> #include <conio.h> #include <windows.h> #include <stdlib.h> #include <stdio.h>
C++ Методы реализации операций над текстом http://www.cyberforum.ru/cpp-beginners/thread102235.html
Не совсем понятны мне алгоритмы, как реализовать такие операции над текстом: Класс-контейнер, который является абстракцией текста и состоит из объектов класса-строки и методов добавления строки к тексту, удаление строки из текста, очистка текста, получения длины самой длинной строки, транслитерации текста, из кириллицы в латиницу, выведение текста
C++ Анимация контролов на winform Возник вопрос - а как под виндой писать анимацию для контроллов (кнопок, окон и прочего) Нормально? =) Вопрос собственно возник изза чего: В MacOSX привык к аниматору - допустим мне нужно, чтобы окно сжалось и куда-то уехало, притом плавно - всего одна строка кода - setFrame:myRect] (по памяти. Именно для окон строчка немного изменяется, этот код как-раз для кнопок и прочего внутри окна) и... подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
09.03.2010, 18:20     "Рекурсивная функция" (Обход бинарного дерева)
_Eldar_, обошлось без рекурсии, но вроде и дерево создаётся, и печатается... Короче вот:
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
#include <cstdlib>
 
class Node {
public:
    Node() : _left(NULL), _right(NULL), _val(0) {}
    Node(int v) : _left(NULL), _right(NULL), _val(v) {}
    Node(int v, Node *n) {
        if ( v < n->val() ){
            while ( n->val() > v && n->left() != NULL )
                n = n->left();       
        }
        else if ( v > n->val() ){
            while ( n->val() < v && n->right() != NULL)
                n = n->right();
        }
        if ( v == n->val() ){
            std::cerr << "Doubling value (" << v << ")!" << std::endl;
            exit(1);
        }
        else if ( v < n->val() ){
            _right = n;
            _left = n->left();
            n->left(this);
            if ( _left )
                _left->right(this);
        }
        else {
            _left = n;
            _right = n->right();
            n->right(this);
            if ( _right )
                _right->left(this);
        }
        _val = v;
    }
    int val() const { return _val; }
    void val(int v) { _val = v; }
    Node *left() const { return _left; }
    void left(Node *n) { _left = n; }
    Node *right() const { return _right; }
    void right(Node *n) { _right = n; }
    Node *first() const {
        const Node *f = this;
        while ( f->left() != NULL )
            f = f->left();
        return (Node*)f;
    }
    Node *last() const {
        const Node *l = this;
        while ( l->right() != NULL )
            l = l->right();
        return (Node*)l;
    }
private:
    Node *_left;
    Node *_right;
    int _val;
};
 
void printTree(Node *n){
    n = n->first();
    while ( n ){
        std::cout << n->val() << ' ';
        n = n->right();
    }
}
 
void killTree(Node *n){
    Node *t;
    n = n->first();
    while ( n ){
        t = n->right();
        delete n;
        n = t;
    }
}
 
int main(){
    const int values = 10;
    int arr[values] = { 2, 1, 3, 6, 4, 9, 7, 5, 0, 8 }, i;
    Node *n = new Node(arr[0]);
    for ( i = 1; i < values; ++i ){
        n = new Node(arr[i], n);
    }
 
    printTree(n);
    killTree(n);
    std::cout << std::endl;
    return 0;
}
 
Текущее время: 05:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru