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

бинарное древо (удаление) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ STL обращение к элементу list http://www.cyberforum.ru/cpp-beginners/thread43094.html
Помогите исправить ошибку. #include <list> #include <iostream> using namespace std; class PeopleB{ public: int xxx; }; const int EnKolB=4; int main(){
C++ Для чего нужен define? Для чего нужен оператор define? например код #define N 20 /* сколько первых чисел посчитать */ void main(){ int fibs, index; http://www.cyberforum.ru/cpp-beginners/thread43051.html
Работа со строками. Связное хранение строк. C++
Постановка задачи В текстовом файле хранится последовательность слов. Предполагается, что слово содержит не более 20 букв, слова отделяются друг от друга одним или бо-лее пробелами, количество слов в файле не ограничено. Требуется: 1. Прочитать исходный текст из файла и поместить его в памяти, использовать однонаправленные циклические цепочки . Каждое звено текста размещается в памяти...
Нужно исправить 2 ошибки в коде C++
собственно, САБЖ. нужно исправить 2 ошибки в коде, чтобы его можна было скомпилить и сделать из него ехе-шник. код немалый, тому залил на sendspace: http://sendspace.com/file/ubkkh6 времени немного - до утра понедельника..выручайте, народ, пожалуйста
C++ Вывод случайных текстов на экран http://www.cyberforum.ru/cpp-beginners/thread42999.html
помогите пожалуйста, мне нужен код для случайных выводов текстов на экран
C++ обход массива рендом. Дан массив 10 на 10. Рендом выбираем точку, сравниваем элемент... Затем нужно опять выбирать рендом элемент, но так что бы не выбирать тот, который уже брали. Как можно запомнить, что выбирали уже, а что нет? подробнее

Показать сообщение отдельно
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.07.2009, 10:13     бинарное древо (удаление)
Код
{Head = NULL; delete Head;}
тут поменять очерёдность

Код
if(!temp->Left)  {del_left(temp, Old, value);return;}
а если ещё и !temp->Right ?

видишь
C
1
2
    if (leftson && rightson)
        return MergeSons(leftson, rightson);
здесь эта проверка проводится в первую очередь и, только если она не сработала, тогда остальные действия

ещё void'овые указатели применяются для поддержки общего вида дерева - это когда узлы бывают разные, а функции для работы с бинарным деревом применяются одни и те же
то есть, несмотря на то, что там они возвращаются неправильно, там они такие и остаются, надо функцию перевести на общий вид

вместо
C
1
struct tree *dtree(struct tree *root, char key)
C
1
void *dtree(void *root, char key)
C
1
    if(root->info == key)
C
1
    if(((struct tree *) root)->info == key)
для получения элементов можно написать специальную функцию, и так для каждого вида узла, а потом просто в функцию обработки дерева передать указатель на функцию обработки узла

таким образом дерево можно написать один раз, а видов узлов создавать сколько угодно и для них писать индивидуальные функции

C
1
2
3
4
struct tree1 {
    char key;
    struct tree1 *left, *right;
};
C
1
2
3
4
5
struct tree2 {
    char *s;
    int size;
    struct tree2 *left, *right;
};
C
1
2
3
4
struct tree3 {
    struct tree *root;
    struct tree3 *left, *right;
};
то есть, как видишь, для создания и заполнения каждого из этих узлов нужно применять совершенно различные алгоритмы, но при всём при этом можно иметь одну функцию поиска в дереве, одну функцию вывода дерева, одну функцию удаления дерева и одну функцию добавления/удаления любого элемента
итого пять функций, а не пятнадцать
 
Текущее время: 15:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru