25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
1

Бинарное дерево

11.03.2012, 21:06. Показов 1552. Ответов 11
Метки нет (Все метки)

Привет

Делаю бинарное дерево, пытаюсь добавить элемент.
Что делаю не так?
Класс дерева
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
struct node{
       int data; //поле данных
       node* left; //указатель на левый потомок
       node* right; //указатель на правый потомок
};
 
 
class tree {
public:
    node* root;
 
 
    tree() {
        root = NULL;
    }
 
    node *create(int info) {
        node *new_node = new node;
        new_node->data = info;
        new_node->left = NULL;
        new_node->right = NULL;
        return new_node;
    }
    node *funny_boy(node* root, int info) {
        if(root == NULL) root = create(info);
        if(info < root->data)
            if(root->left = NULL)
                root->left = create(info);
            else
                funny_boy(root->left, info);
        if(info >= root->data)
            if(root->right == NULL)
                root->right = create(info);
            else 
                funny_boy(root->right, info);
        return root;
    }
    void printt(node *root) {
        if(root != NULL) {
            printt(root->left);
            printf("%d 5", root->data);
            printt(root->right);
        }
    }
};
мэйн
C++
1
2
3
4
5
6
7
8
9
10
11
int main() {
    setlocale(LC_ALL, "");
    tree t;
 
    t.funny_boy(t.root, 5);
        t.funny_boy(t.root, 10);
    t.printt(ROOT);
 
    printf("%d", t.root->data);
 
    t.printt(t.root);
Должен вывести 5, 10 или не знаЮ, мусор там. На крайняк выдать ошибку.
Ошибок не выводит, выводит пустой экран.

Что я делаю не так?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2012, 21:06
Ответы с готовыми решениями:

Исходное бинарное дерево превратить в бинарное дерево поиска, при этом сохранив его структуру
Помогите, не могу понять!( Нужно исходное бинарное дерево превратить в бинарное дерево поиска, при...

Бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой
Дано бинарное дерево. Удалить из дерева часть вершин так, чтобы оставшееся дерево стало пирамидой.

Бинарное дерево
Здавствуйте, не работает удаление элемента в бинарном девере поиска. Задание: Задание: Описать...

Бинарное дерево
Всем доброго времени суток! Задача такая: Реализовать бинарное дерево в программе...

11
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
11.03.2012, 21:14 2
может так
C++
1
2
3
4
5
if(root == NULL)
{
    root = create(info);
    return root;
}
0
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
11.03.2012, 22:41  [ТС] 3
Нет, не помогло

Добавлено через 1 минуту
Да и все в порядке в тех строках

Добавлено через 33 минуты
Вообще есть где-то пример бинарного дерева на основе узла-структуры и класса-дерева?

Добавлено через 12 минут
функцию мэйн поправил
это тестил бред всякий

C++
1
2
3
4
5
6
7
8
9
int main() {
        setlocale(LC_ALL, "");
        tree t;
 
        t.funny_boy(t.root, 5);
        t.funny_boy(t.root, 10);
 
        t.printt(t.root);
}
0
1548 / 914 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
11.03.2012, 22:47 4
мб так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void funny_boy(node* root, int info) {
                if(root == NULL) {
                    root = create(info);
                    return;
                }
                if(info < root->data)
                        if(root->left = NULL)
                                root->left = create(info);
                        else
                                funny_boy(root->left, info);
                if(info >= root->data)
                        if(root->right == NULL)
                                root->right = create(info);
                        else 
                                funny_boy(root->right, info);
        }
Добавлено через 2 минуты
retmas, не заметил ваш пост, по идее там ошибка.
0
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
11.03.2012, 22:50 5
имея то, что имеем придется писать
C++
1
2
        t.root = t.funny_boy(t.root, 5);
        t.root = t.funny_boy(t.root, 10);
Цитата Сообщение от VladSharikov Посмотреть сообщение
Да и все в порядке в тех строках
без этого:
C++
1
2
3
4
5
if(root == NULL)
{
    root = create(info);
    return root;
}
вставит больше нодов, чем надо
0
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
11.03.2012, 23:33  [ТС] 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 node *funny_boy(node* root, int info) {
                if(root == NULL) { root = create(info); return root; }
                if(info < root->data)
                        if(root->left = NULL)
                                root->left = create(info);
                        else
                                funny_boy(root->left, info);
                if(info >= root->data)
                        if(root->right == NULL)
                                root->right = create(info);
                        else 
                                funny_boy(root->right, info);
                return root;
        }
в итоге так должно выглядеть?

а вот щас чего то делал по методу "первокурсника", дак у меня просто в мейне
tree t;

он вылетает. я так понимаю вылетает при вызове конструктора(вернее точно при этом), а это что такое? О_О
0
1548 / 914 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
11.03.2012, 23:35 7
VladSharikov, зачем в ф-ции funny_boy что-либо возвращать? она же добавляет элемент, и только.
0
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
11.03.2012, 23:38  [ТС] 8
Вы сказали возвращать, обратил внимание.

У вас функция void а в коде есть return(что не правильно)

Сейчас попробую.

Но мне кажеться, вы что то путаете. Гуглю уже 5ый битый час и все что встречал именно с типом (имя структуры) и return

Добавлено через 22 секунды
Да и сам я думаю там должен быть return и node * вместо воид
0
1548 / 914 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
11.03.2012, 23:38 9
Цитата Сообщение от VladSharikov Посмотреть сообщение
У вас функция void а в коде есть return(что не правильно)
уверены, что не правильно?
0
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
11.03.2012, 23:42  [ТС] 10
Нет сто процентов надо возвращать указатель

Добавлено через 1 минуту
Функция void( в переводе пустой ), не возвращает никаких значений.

да и вот выдержка из хелпа

" the void keyword specifies that the function does not return a value"

Добавлено через 1 минуту
Мы сейчас спорим о том должен ли воид возвращать что-то или нужен ли воид в моей функции?

По поводу первого, возможно, я не столько с войдом работал, но в любом случае, вопрос в другом
0
1548 / 914 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
11.03.2012, 23:43 11
Она у меня и так ничего не возвращает, а return свидетельствует лишь о том в данном случае, что нужно выходить из функции.

Добавлено через 34 секунды
Ну я просто не понимаю, зачем функции, которая добавляет новый элемент в дерево, что-либо возвращать, объясните, зачем оно вам.
0
25 / 25 / 7
Регистрация: 02.12.2010
Сообщений: 824
11.03.2012, 23:56  [ТС] 12
Ибо это рекурсивная функция создания дерева. Как по другому сделать я не знаю. Скока учебники не листаю, не гуглю везде так!

Добавлено через 19 секунд
Есть еще итеррационная, но это другоке
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2012, 23:56

Бинарное дерево
Помогите, пожалуйста. Осталась последняя задача в контрольной. Не знаю даже, как к ней...

Бинарное дерево
Нужно записать в дерево и вывести в форматированном виде каталог файлов(типа windows) на вход даны...

бинарное дерево
Здравствуйте! Начинаю учить деревья, написала такую функцию ввода и разных выводов Только вот...

Бинарное дерево
Задание сделать бинарное дерево, но при добавлении появилась проблема, не могу разобраться с...

Бинарное дерево
Добрый день.У меня такая проблема, я создал класс для работы с бинарным деревом, программа пишет...

Бинарное дерево
Реализовать базу данных ГАИ по штрафным квитанциям с помощью бинарного дерева. Ключом будет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.