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

Удаление вершины дерева поиска - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Распараллеливание алгоритмов http://www.cyberforum.ru/cpp-beginners/thread616837.html
Доброго дня всем. Встал вопрос о выборе темы,связанной с распараллеливанием алгоритмов. Какие задачи наиболее "восприимчивы" к распараллеливанию? Есть ли польза при распараллеливании сортировок? P.S. Буду рад, если кто-нибудь подскажет какие-либо ресурсы, связанные с данной проблемой
C++ Текст в файле:Структура - знаки зодиака Задание: Текст в файле:Структура - знаки зодиака. Структура с полями: фамилия,год рождения,знак зодиака. Ввести с клавиатуры знак Зодиака Найти в файле запись с таким знаком и вывести его. Добавлено через 29 секунд Плиз помогите http://www.cyberforum.ru/cpp-beginners/thread616828.html
C++ Реализовать в виде функций набор подпрограмм
Здраствуйте помогите пожалуйста решить задание : Реализовать в виде функций набор подпрограмм для выполнения операций с многочленами от одной переменной (первый многочлен степени m, второй — степени n): 1) сложения; 2) вычитания; 3) возведения в натуральную степень k; 4) вычисления производной от многочлена ; 5) вычисления значения в точке x0. Используя эти...
C++ Что нужно добавить в программу?
Народ помогите пожалуйста, почему не сохраняются внесённые записи #include "stdafx.h" #include "cstdlib" #include <iostream> #include <conio.h> using namespace std; class Account {
C++ Поиск в файлах с различными форматами http://www.cyberforum.ru/cpp-beginners/thread616781.html
Добрый день, собственно появилась задача - в винде открывать файлы различных форматов и затем производить писк по ключевым словам в теле файла. Так как необходимо работать с весьма различными по свое структуре форматами (.djvu,.pdf, файлы офиса от MS) возникают вопросы следующие: 1) Каким образом лучше определять форматы файла? Т.е. я понимаю, что необходимо открывать на бинарное чтение файлы,...
C++ Структуры. Сортировка Здравствуйте, ув. форумчане. Я студент 1ого курса и только недавно начал изучать C++, учился по видеоурокам, но застрял на структурах, не очень понял как все работает. Нам нужно было сделать программу "Студенческий поток". Программа должна добавлять\удалять\редактировать информацию о студенте, добавлять\удалять\редактировать информацию о группах, поиск по студентам и тд. это все получилось... подробнее

Показать сообщение отдельно
Yentroistok
1 / 1 / 0
Регистрация: 25.02.2012
Сообщений: 59
30.06.2012, 12:08     Удаление вершины дерева поиска
Здравствуйте.
Не получается написать удаление вершины из дерева поиска, что бы после удаления, дерево оставалось деревом поиска.
Помогите пожалуйста реализовать. Все остальное написал.
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;
 
//------------------------------------------------------------------------------------------------------------------------- 
struct  bin_tree
{
   int value;
   bin_tree *left, *right, *parent;
}
 
*pHead = NULL; // указатель на вершину равен нулю
 
//------------------------------------------------------------------------------------------------------------------------- 
 
int info, item;
 
void add_node(bin_tree*, int);   // добавление конкретного узла дерева
 
void add_bin_tree(int);    // проверка на "пустоту" дерева, если указатель на вершину равен нулю, создает узел
 
// обход
void printtree(bin_tree*, int Length);   // вывод дерева на экран
void obhod(bin_tree*, ofstream&);
 
//-----------------------------------------------------------------------------------------------------------------------
int main()
{
    setlocale (LC_ALL, "Russian");
    
    int el, ch;
    
    bool exit = false;
    
    ofstream fail("binTree.txt");  // эл-ты записываются в этот файл
    
    while (exit == false) // меню программы
    {
        printf("---------------------------------------------------------------------\n");
        printf("1) Введите последовательность\n");
        printf("2) Вывод дерева на экран\n");
        printf("3) Удаление эл-та из дерева\n");
        printf("4) Выход\n");
        printf("---------------------------------------------------------------------\n");
        
        ch=getch();
            switch(ch)
            {
                case '1':
                    cout << "Введите последовательность(для выхода введите '.' или 'буквенные символы'\n" << endl;
                    cout << "Информационные поля вершин дерева: " << endl;
                            while(cin>> el)
                                {
                                    add_bin_tree (el);
                                }
                break;
 
                case '2':
                    cout << "Если вы видите только надпись: 'Так выглядит дерево:', значит дерево пусто!\n" << endl;
                    cout << "Так выглядит дерево:\n" << endl;
                    
                        printtree (pHead, 0);
                break;
 
                case '3':
                    // вызов функции удаления
                break;
 
                case '4':
                    exit = true;
                break;
            
                default:
                    exit = true;
            }
    }
    fail.close();
    return 0;
}
//--------------------------------------------------------------------------------------------------------------------------
void addnode(bin_tree* tree, int value) // добавление конкретного узла(node - узел) дерева
{
    if(value < tree->value)
    { 
        if(tree->left != NULL) // если значение меньше, двигаемся по "левой ветке"
            addnode(tree->left, value);
        else
        {  
            tree->left = new bin_tree;
            tree->left->value = value;
            tree->left->left = NULL;
            tree->left->right = NULL;
        }
    }
 
    if(value > tree->value) // иначе двигаемся по правой 
    { 
        if(tree->right != NULL)
            addnode(tree->right, value);
        else
        {
            tree->right = new bin_tree;
            tree->right->value = value;
            tree->right->left=NULL;
            tree->right->right=NULL;
        }
    }
 
    if(value == tree->value)                
        cout<< value<< " Эл-т уже присутствует в дереве"<< endl;
}
//------------------------------------------------------------------------------------------------------------------------- 
void add_bin_tree(int value)
{
    if(pHead == NULL) // если дерево пустое - создадим первый узел
    {
       pHead = new bin_tree;
       pHead->value = value;
       pHead->left = NULL;
       pHead->right = NULL;
    }
    else
        addnode(pHead, value); // если в вершине уже что-то есть - добавляем слева или справа 
}
//------------------------------------------------------------------------------------------------------------------------- 
void obhod(bin_tree* tree, ofstream &fail)
{     
    if (tree != NULL)
    { 
        obhod(tree->left, fail);
        fail<< tree->value<< " ";
        obhod(tree->right, fail);
    }
}
//------------------------------------------------------------------------------------------------------------------------
// Выод дерева на экран
void printtree(bin_tree* tree, int Length)
{     
    if (tree != NULL)
    { 
        printtree(tree->left, Length + 1);     // вывод левого поддерева
        for(int i = 0; i < Length; i++) 
            {
                cout << "--";
            }
        cout << "Уровень: " << Length << "; Элемент = "; cout << tree->value << endl;
        //cout<< tree->value<< endl;       // вывод корня подерева
        printtree(tree->right, Length + 1);            // вывод левого поддерева
    }
}
//-------------------------------------------------------------------------------------------------------------------------
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru