Форум программистов, компьютерный форум 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 места), необходимых для перевозки группы. Мне нужно сделать типа как вот эта программа по такому же образу int f(int p,string k) { int l; if(k=="1"){ l=150*p; }
C++ Разряженный вектор произвольной длины
Помогите пожалуйста ответить на вопрос:"Определить набор операций и структуру данных для абстрактного типа данных «Разряженный вектор произвольной длины»".
C++ Структуры: отобразить на экран анкетные данные студентов-отличников в виде таблицы http://www.cyberforum.ru/cpp-beginners/thread1768805.html
Помогите разобраться как написать программу,вообще не понимаю алгоритм действий и как составить программу( Дан список учебной группы, включающий 20 человек. Для каждого студента известны: фамилия, имя, дата рождения, оценки по всем дисциплинам за последний семестр. Составить программу, которая обеспечивает ввод информации и отображение ее на экран в виде таблицы. ...
C++ Игра "Калах" Для выбора лунки, с которой делается очередной ход должны использоваться клавиши "←", "→". Ход определяется нажатием клавиши "SPACE". При нажати клавиши "н" на экран должны выводиться правила игры. Перед началом игры должны запрашиваться имена игроков. Как это можно реализовать? Правила игры: https://ru.wikipedia.org/wiki/Калах#.D0.9F.D1.80.D0.B0.D0.B2.D0.B8.D0.BB.D0.B0 подробнее

Показать сообщение отдельно
Вероника99
4 / 4 / 1
Регистрация: 16.12.2013
Сообщений: 425
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);
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru