Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

llerik

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
struct Node{
    int d;
    Node *left;
    Node *right;
};
Node *first(int d);
Node *search_insert(Node *root, int d);
void print_tree(Node *root, int l);
//---------------------------------------------------------------------------
int main(){
    int b[] = {10, 25, 20, 6, 21, 8, 1, 30};
    Node *root = first(b[0]);
    for (int i = 1; i<8; i++) search_insert(root, b[ i ]);
    print_tree(root, 0);
        getch ();
    return 0;
}
//---------------------------------------------------------------------------
// Формирование первого элемента дерева
Node * first (int d){
    Node *pv = new Node;
    pv->d = d;
    pv->left = 0;
    pv->right = 0;
    return pv;
}
//---------------------------------------------------------------------------
// Поиск с включением
Node * search_insert (Node *root, int d) {
    Node *pv = root, *prev;
    bool found = false;
    while (pv && !found){
        prev = pv;
        if (d == pv->d) found=true;
        else if (d < pv->d) pv=pv->left;
        else pv=pv->right;
    }
    if (found) return pv;
    // Создание нового узла
    Node *pnew = new Node;
    pnew->d = d;
    pnew->left = 0;
    pnew->right = 0;
    if (d < prev->d)
        // Присоединение к левому поддереву предка
        prev->left = pnew;
    else
        // Присоединение к правому поддереву предка
        prev->right = pnew;
    return pnew;
}
//---------------------------------------------------------------------------
// Обход дерева
void print_tree(Node *p, int level){
    if (p){
        print_tree(p->left, level+1);       // вывод левого поддерева
        for (int i = 0; i<level; i++) cout << " ";
        cout << p->d << endl;                 // вывод корня поддерева
        print_tree(p->right, level+1);     // вывод правого поддерева
    }
}

Всего записей: 8 | Зарегистр. 02-05-2008 | Отправлено: 22:34 02-05-2008
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru