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

Деревья - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Существование объекта http://www.cyberforum.ru/cpp-beginners/thread627039.html
Здравствуйте, есть довольно сложное и интересное задание Есть класс someClass нужно сделать так чтобы: 1) Его объекты можно было создавать только динамически 2) Даже созданные динамически объекты хранить нигде нельзя(не допускаются указатели на память, объект сам удаляется) То есть можно так: new someClass(); но не так: someClass *sc = new someClass(); someClass sc;
C++ Подсчёт количества подстрок Посмотрите пожалуйста нормально ли написана функция, которая считает количество подстрок? int SearchSubString(char *s1,char *s2){ int result = 0; while(*s1){ if(strstr(s1,s2)) result++; else return result; http://www.cyberforum.ru/cpp-beginners/thread627021.html
Переворот строки C++
Почему при использовании указателя ошибка, а при использование массива всё нормально? void RevStr(char *str){ char *start,*end; char t; start = str; end = &str;
Массивы: вычислить сумму положительных и количество отрицательных элементов массива C++
Здравствуйте. Столкнулся с проблемой, нужно вычислить сумму положительных и количество отрицательных элементов массива v , предварительно числа нужно ввести с клавиатуры. У меня абсолютно ничего не получается. Хотел вводить каждое число отдельно, если можно их как-то сразу все ввести было бы вообще отлично. Помогите пожалуйста, а то я вообще не вехал. То что я пытался делать ниже, но там вылазят...
C++ Добавить после каждой цифры 2 нуля http://www.cyberforum.ru/cpp-beginners/thread626946.html
Строки. Добавить после каждой цифры 2 нуля. например: ввели: а1 б2 абв получили: а100 б200 абв на данный момент при одной цифре выдает верно+мусор, при двух и более цифрах выдает ересь. #include <iostream> #include <ctype.h> #include <stdio.h>
C++ парсит TS до уровня PES пакетов Надо парсить медиа-поток MREG2-TS(Transport Stream) до уровня PES пакетов. Кто может помочь, подсказать с чего начать. Какую литературу можете посоветовать, дать ссылки на примеры. Заранее благодарю. подробнее

Показать сообщение отдельно
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
22.07.2012, 06:52     Деревья
Цитата Сообщение от reznov Посмотреть сообщение
можно подробнее,пожалуйста?
Функция удаления узла имеешь ввиду? Она неоднозначна. У меня была такая задача в лабе по проге. Прикрепил её к сообщению. Собственно, DeleteNode - то, что тебе нужно почитать
upd. Файл не прикрепился, поэтому кодом :
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
/*
9 - Двоичные деревья
22*. Из входной последовательности чисел построить двоичное дерево и удалить узел, содержащий значение х (х вводится с клавиатуры).
*/
#include <conio.h>
#include <iostream>
#include <fstream>
#include <locale.h>
int flag = 0;
struct TREE
{
    int number, amount;
    TREE *leftLink, *rightLink;
};
 
TREE *CreateTree (TREE *currentNode, int enteredNumber)
{
    if (currentNode==NULL)
    {
        currentNode=new TREE;
        currentNode->rightLink=currentNode->leftLink=NULL;
        currentNode->amount=1;
        currentNode->number=enteredNumber;
    }
    else
        if (enteredNumber<currentNode->number)
        {
            currentNode->leftLink=CreateTree(currentNode->leftLink,enteredNumber);
        }
        else
            if (enteredNumber>currentNode->number)
            {
                currentNode->rightLink=CreateTree(currentNode->rightLink,enteredNumber);
            }   
            else
                if (enteredNumber==currentNode->number)
                {
                    currentNode->amount++;
                }
    return currentNode;
}
int child (TREE* node)
{
    int children = 0;
    if (node->leftLink) children--;
    if (node->rightLink) children+=2;
    return children;
}   
void DeleteNode (TREE* foundedNode, TREE* parentNode)
{
    TREE* currentNode;
    if (child(foundedNode) == 1)
    {
        currentNode = foundedNode->rightLink;
        while (currentNode->leftLink)
            currentNode = currentNode->leftLink;
        currentNode->leftLink = foundedNode->leftLink;
        if (parentNode->leftLink == foundedNode)
            parentNode->leftLink = foundedNode->rightLink;
        else
            parentNode->rightLink = foundedNode->rightLink;
        delete foundedNode;
    }
    else
        if (child(foundedNode) == -1)
        {
            if (parentNode->leftLink == foundedNode)
                parentNode->leftLink = foundedNode->leftLink;
            else
                parentNode->rightLink = foundedNode->leftLink;
            delete foundedNode;
        }
        else
        {
            if (parentNode->leftLink == foundedNode)
                parentNode->leftLink = foundedNode->rightLink;
            else
                parentNode->rightLink = foundedNode->rightLink;
            delete foundedNode;
        }
}
void FindNode (int number, TREE* currentNode, TREE* lastNode)
{
    if (flag) 
        return;
    else
        if (currentNode)
        {
            if (currentNode->number == number)
            {
                flag = 1;
                DeleteNode (currentNode, lastNode);
                return;
            }
            else
            {
                FindNode(number, currentNode->leftLink, currentNode);
                FindNode(number, currentNode->rightLink, currentNode);
                return;
            }
        }
}
void main()
{
    setlocale(0,"");
    std::ifstream in("input.txt");
 
    int enteredNumber;
    in >> enteredNumber;
    TREE *top=new TREE;
    top->number=enteredNumber;
    top->leftLink=top->rightLink=NULL;
    top->amount=1;
 
    while (!in.eof())
    {
        in >> enteredNumber;
        CreateTree(top,enteredNumber);
    }
 
    std::cout << "Введите искомое число : " << std::endl;
    int nodeNumber;
    std::cin >> nodeNumber;
 
    FindNode(nodeNumber, top, NULL); 
 
    if (flag == 0) 
    {
        std::cout << "Узел не найден!" << std::endl;
        _getch();
        return;
    }
 
    std::cout << "Дерево было перестроено!" << std::endl;
 
    _getch();
}
 
Текущее время: 07:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru