Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
1

Бинарное дерево поиска

07.03.2017, 00:24. Показов 3732. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Решил написать бинарное дерево поиска, но что-то пошло не так, дерево не выводиться не понимаю почему.
Вот весь код:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <string>
using namespace std;
 
class Node {
public:
    int info;
    Node *left, *right;
 
    Node() {
        info = 0;
        right = left = nullptr;
    }
};
 
class Tree {
public:
    Node *current = nullptr;
 
    Tree(int a) {
        current = new Node;
        current->info = a;
    }
 
    void push(Node *root, int number) {
        if (root == nullptr) {
            root = new Node;
            root->left = new Node;
            root->info = number;
        }
        else {
            if (number < root->info) {
                push(root->left, number);
            }
            if (number >= root->info) {
                push(root->right, number);
            }
        }
    }
 
    void print(Node* root, unsigned k = 0) {
        if (root != nullptr) {
            print(root->left, k + 3);
 
            for (unsigned i = 0; i < k; i++) {
                cout << "  ";
            }
 
            cout << root->info << endl;
            print(root->right, k + 3);
        }
    }
};
 
int main(int argc, char *argv[]) {
 
    Tree t(10);
    Node *root = t.current;
 
    t.push(root, 2);
    t.push(root, 3);
    t.push(root, 15);
 
    t.print(root);
 
    return 0;
}

Но подозреваю что все дело в этом куске
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    void push(Node *root, int number) {
        if (root == nullptr) {
            root = new Node;
            root->left = new Node;
            root->info = number;
        }
        else {
            if (number < root->info) {
                push(root->left, number);
            }
            if (number >= root->info) {
                push(root->right, number);
            }
        }
    }
Добавлено через 1 час 50 минут
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.03.2017, 00:24
Ответы с готовыми решениями:

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

Бинарное дерево поиска:
Всем добрый вечер) Подскажите пж новичку из-за чего вылетает программа? Я как понял косяк в методе...

Бинарное дерево поиска
Вот задали лабораторною работу. Сделал бинарное дерево поиска. Выдает ошибку &quot;Что послан сигнал от...

Бинарное дерево поиска C++
+Доброго времени суток! У меня есть задание:создать картотеку,в ней указать тип магазина,номер...

7
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
07.03.2017, 11:00 2
В 4 строке создаётся новый узел, но потом он никак не используется.
P.S. 11 строку можно заменить на else.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
07.03.2017, 12:12  [ТС] 3
likehood, в 4 строке типа условие выхода, else разве что-то изменит?
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
07.03.2017, 13:01 4
Цитата Сообщение от Azazel-San Посмотреть сообщение
в 4 строке типа условие выхода
Какое ещё условие? Я говорил об этой строке:
C++
1
root->left = new Node;
Зачем она нужна?

Добавлено через 2 минуты
Цитата Сообщение от Azazel-San Посмотреть сообщение
else разве что-то изменит?
На результат это не повлияет. Просто нет смысла проверять условие, если можно написать else.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
07.03.2017, 13:06  [ТС] 5
likehood, ну типо если там ноль, то создать узел

Добавлено через 1 минуту
likehood, ой, сори я слепой, это я крч экспериментировал)) оно там не нужно, что с ним что без него - не работает

Добавлено через 2 минуты
likehood, все верно else лучше смотрится но сначала все бы заработало, а потом уж и можно фиксить
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
07.03.2017, 13:18 6
Тут проблема в том, что когда мы создаём новый узел в 3 строке, мы нигде не сохраняем этот указатель - меняется лишь локальная переменная root. Вот с этим и надо разбираться.
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
07.03.2017, 13:23  [ТС] 7
likehood, т.е. надо ещё пересохранять этот узел к примеру в current?
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
07.03.2017, 13:25 8
Лучший ответ Сообщение было отмечено Azazel-San как решение

Решение

Цитата Сообщение от likehood Посмотреть сообщение
меняется лишь локальная переменная root
Можно просто передавать ссылку на указатель:
C++
1
void push(Node *& root, int number)
1
07.03.2017, 13:25
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.03.2017, 13:25
Помогаю со студенческими работами здесь

Бинарное дерево поиска
В текстовом файле содержится произвольный текст. Построить на его основе бинарное дерево поиска,...

Бинарное дерево поиска
Разработать программу работы с бинарным деревом поиска (вставка, удаление элементов, вывод дерева)....

Бинарное дерево поиска
Помогите пожалуйста.. Нужна программа &quot;бинарные деревья поиска&quot;.. и если можно объяснение.. ...

Бинарное дерево поиска
#include &lt;iostream&gt; using namespace std; struct node { int key; node *left; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Создание макробота, как способа экономии времени и варианта ИИ.
Hrethgir 28.01.2025
Чисто теоретически, создание ИИ на ПК можно разделить на части. Создать бота отвечающего за железо (эмулирование вкл, выкл, мышь, клавиатура), другой бот осуществляет распознавание изображений,. . .
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru