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

Удаления узла из бинарного дерева поиска - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Builder Алгоритм поиска (искомый элемент не находится) http://www.cyberforum.ru/cpp-beginners/thread1114498.html
Здравствуйте.Столкнулся с такой проблемой,не находит искомый элемент,в чем ошибка ? int m,x,i_key=0,j_key=n-1; x=StrToInt(Edit2->Text); while(i_key< j_key) { m = (i_key+ j_key)/2; if (a < x) i_key= m+1; else j_key = m; } if (a!=x)
C++ Боуер Мур. поиск подстроки Написал код, но он некорректно ищет подстроку. В зависимости где находится искомый элемент в тексте. Может вы найдете ошибку? #include <iostream> #include <fstream> #include <string> #include <conio.h> using namespace std; void search(char*text, char*find, int n2, int n1) http://www.cyberforum.ru/cpp-beginners/thread1114495.html
Конструкторы базового и производного класса C++
class first { public: first(int a):first(a){} void Setfirst(int a){first=a;} int Getfirst(){return first;} private: int first; };
Строки. Найти слово, в котором число различных символов минимально C++
Добрый вечер! Помогите, пожалуйста. Ввести n слов с консоли. Найти слово, в котором число различных символов минимально. Если таких слов несколько, найти первое из них.
C++ Связывание классов http://www.cyberforum.ru/cpp-beginners/thread1114451.html
Всем привет. Подскажите, пожалуйста, как решить вот такую проблему: У меня есть класс connections который хранит в себе все активные соединения типа connection. Возникает ситуация когда один из множества connection хочет отправить сообщение всем клиентам в классе connections. Для этого я сделал свойство clients в классе connections статическим, но не могу получить доступ к этому свойству в...
C++ Как массово вывести значения всех элементов структуры? В общем есть код #include<iostream> using namespace std; struct part; { int dom; int kvartira; }; int main() подробнее

Показать сообщение отдельно
Аммурка
 Аватар для Аммурка
4 / 4 / 0
Регистрация: 10.02.2014
Сообщений: 30
09.03.2014, 12:57     Удаления узла из бинарного дерева поиска
Уже довольно много времени убил на эту задачу, теорию понимаю, на практике реализовать никак не получается.
Помогите пожалуйста написать эту функцию которая подойдет под мой код:
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
#include <iostream>
using namespace std;
struct node
{
    int key, value;
};
//------------------------------------------------------
struct tree
{
    node data;
    tree *left, *right;
} *root;
//------------------------------------------------------
tree* Insrec(tree *root, node data)
{
    if (!root)
    {
        root = new tree;
        root->data = data;
        root->left = 0;
        root->right = 0;
    }
    else
    if (data.value < root->data.value)
        root->left = Insrec(root->left, data);
    else
        root->right = Insrec(root->right, data);
    return root;
}
//------------------------------------------------------
void func(tree *root)
{
    if ((root->left) && (root->right))
        cout << "Element with key " << root->data.key << " has two childs" << endl;
    if (root->left != NULL)
        func(root->left);
    if (root->right != NULL)
        func(root->right);
}
//------------------------------------------------------
void print(tree *root, int level)
{
    cout << "Key: " << root->data.key << ", value: " << root->data.value << " Level: "<< level << endl;
    if (root->left != NULL)
        print(root->left, level + 1);
    if (root->right != NULL)
        print(root->right, level + 1);
}
//------------------------------------------------------
void del(tree *root)
{
    if (root->left != NULL)
        del(root->left);
    if (root->right != NULL)
        del(root->right);
    delete root;
}
//------------------------------------------------------
int main()
{
    int n;
    cout << "Put n: ";
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        node *data = new node;
        cout << "Put data " << i + 1 << ": ";
        cin >> data->value;
        data->key = i;
        root = Insrec(root, *data);
    }
    func(root);
    print(root, 0);
    system("pause");
    del(root);
    return 0;
}
P.S. исходный код прошу не менять, так как у препода есть копия))
Делал сам последний раз вот от сюда http://neerc.ifmo.ru/wiki/index.php?...ная_реализация,
но затея накрылась медным тазом.
Из-за того что у меня key и value в одной структуре, а left и right в другой, я не могу сделать по других примерах.
Для тех кто все же мне поможет:
http://neerc.ifmo.ru/wiki/images/9/9e/Bst_del2.png -Удаление узла с одним дочерним узлом.
http://neerc.ifmo.ru/wiki/images/thu...x-Bst_del3.png - Удаление узла с двумя дочерними узлами.
Это же есть по предыдущей ссылке.
Зарание спасибо за помощь.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru