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

Поиск в двоичном дереве - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить значение суммы используя оператор for http://www.cyberforum.ru/cpp-beginners/thread1768847.html
S= \sum \sum_{10}^{i=-10}1/i^3 i\neq 0 Помогите пожалуйста S= \sum_{10}^{i=-10}1/i^3 i\neq 0
C++ Гаражная стоянка Условие задачи: Гаражная стоянка имеет одну стояночную полосу, причем единственный въезд и единственный выезд находятся в одном конце полосы. Если владелец автомашины приходит забрать свой... http://www.cyberforum.ru/cpp-beginners/thread1768843.html
Структура «Автобусный тур» C++
Структура «Автобусный тур» с полями «пункт назначения», «дата начала тура», «дата окончания тура», «количество человек в группе». Функция - расчёт количества автобусов (42 места), необходимых для...
C++ Разряженный вектор произвольной длины
Помогите пожалуйста ответить на вопрос:"Определить набор операций и структуру данных для абстрактного типа данных «Разряженный вектор произвольной длины»".
C++ Структуры: отобразить на экран анкетные данные студентов-отличников в виде таблицы http://www.cyberforum.ru/cpp-beginners/thread1768805.html
Помогите разобраться как написать программу,вообще не понимаю алгоритм действий и как составить программу( Дан список учебной группы, включающий 20 человек. Для каждого студента известны:...
C++ Игра "Калах" Для выбора лунки, с которой делается очередной ход должны использоваться клавиши "←", "→". Ход определяется нажатием клавиши "SPACE". При нажати клавиши "н" на экран должны выводиться правила игры.... подробнее

Показать сообщение отдельно
Вероника99
5 / 5 / 1
Регистрация: 16.12.2013
Сообщений: 429
22.06.2016, 19:53  [ТС]
Тут разобралась, сделала таким образом:
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
int max_l=0;
tree *seek_count (tree *p, int level)
{
    if(p)
    {
        if(max_l<p->count)
        {
            max_l=p->count;
            
        }
        seek_count(p->left,level+1);
            seek_count(p->right,level+1);
 
    }
    return p;
}
 
void print_tree (tree *p, int level)
{
    if (p)
    {
        print_tree(p->left, level+1);
        for (int i=0; i<level; i++)
        cout<<" ";
        cout<<p->eng<<endl;
            cout<<p->rus<<endl;
        for (int i=0; i<level; i++)
        cout<<" ";
        cout<<p->count<<endl;
        print_tree (p->right, level+1);
    }
    lev=level;
}
Теперь думаю,как организовать пункт б: найденная компонента заносится в новый словарь и удаляется из старого;
Пока есть такое:
C++
1
2
3
4
5
6
7
8
...
tree *p=seek_count(root,0); //р-найденный узел с максимальным счетчиком
    DeleteNode(p); // передаю в функцию удаления узла найденное значение
    cout<<"\nMax= "<<max_l<<endl;
    tree *new_root=NULL;
    if(new_root==NULL)
        new_root=copy_root(p); //заношу в новый словарь найденное значение
    print_tree (new_root, 0);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
tree* copy_root(tree*p)
{
 
    tree *pv=new tree;
    pv->eng=p->eng;
    pv->rus=p->rus;
    pv->count=p->count;
    pv->left=0;
    pv->right=0;
    return pv;
}
tree* DeleteNode(tree*p) //как правильно удалить найденный узел
{
    if(p==NULL)
        return;
 
}
Как правильно удалить найденный узел,подскажите пожалуйста?

Добавлено через 54 минуты
Вообщем написала такую функцию удаления,почему оно не удаляет узел?вроде все по правилам делала
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
void DeleteNode(tree*root,tree*p)
{
    tree *p_new,*pp;
    if(p->left==NULL&&p->right==NULL)
    {
        p=NULL;
        return;
    }
    else if(p->right==NULL)
    {
        p=p->left;
        return;
    }
    else if(p->left==NULL)
    {   p=p->right;
    return;
    }
    else
    {
        p_new=p->left;
        pp=p;
        while(p_new->right!=NULL)
        {
            pp=p_new;
            p_new=p_new->right;
        }
        p_new->right=p->right;
        if(pp!=p)
        {
            pp->right=p_new->left;
            p_new->left=p->left;
        }
    }
    p=p_new;
    
    free(p);
    return;
}
C++
1
2
3
4
tree *p=seek_count(root,0);
    cout<<"Delete"<<endl;
    DeleteNode(root,p);
        print_tree (root, 0);
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru