С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913

Дерево поиска. добавление элемента

23.03.2011, 11:32. Показов 2393. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. Поясните кое что с деревом.
Допустим есть класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class bst
{
    public:
        bst(): root(NULL) {}
        virtual ~bst() {}
 
        void insert(binaryNode*& , size_t);
        void inorder(binaryNode*);
        binaryNode* getRoot(){  return root; }
 
    protected:
        node* root;
    private:
};

и операция добавления элемента в дерево
C++
1
2
3
4
5
6
7
8
9
10
void bst::insert(binaryNode*& r , size_t key){
    if ( r == NULL ){
         r = new binaryNode(key);
        return;
    }
    else if (key < r -> key)
        insert(r ->left, key);
    else if (key > r -> key)
        insert(r -> right, key);
}
В функцию передается по ссылке указатель на корень дерева(root), но после, например, 5 операций insert, root ведь будет указывать не на вершину дерева а на последний вставленный элемент.
И тогда getRoot() тоже будет возвращать указатель не на вершину дерева а на последний вставленный элемент.
А мне хотелось бы чтобы root всегда указывал на вершину.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.03.2011, 11:32
Ответы с готовыми решениями:

Бинарное дерево поиска (удаление, добавление элемента)
Задачи В Бинарном дереве поиска 1)введено с клавиатуры значение, если существует узел с таким значением, он удаляется; 2) с...

Добавление нового элемента в бинарное дерево поиска с вспомогательной функцией(без рекурсии)
с реализацией этой функции с рекурсией проблем нету.но без нее уже по-сложнее(.есть функция иbool Add(int) определенная в классе Дерева,и в...

N дерево, добавление элемента
Добрый вечер, не могу нормально написать добавление узла в дереве. Несколько вариантов пробовал, ни один не сработал, это последний. Где...

5
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 13:07
Мне не видно, чтобы insert изменял root.

Добавлено через 1 минуту
В корректной реализации, вставка элемента реализуется через бинарный поиск.

Добавлено через 21 секунду
*от корня.

Добавлено через 16 секунд
*с последующей перестройкой дерева.)
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
23.03.2011, 13:12
Цитата Сообщение от Deviaphan Посмотреть сообщение
В корректной реализации, вставка элемента реализуется через бинарный поиск.
Чем, интересно, рекурсивная реализация некорректна?
Цитата Сообщение от Deviaphan Посмотреть сообщение
с последующей перестройкой дерева
Опять непонятно, зачем перестраивать дерево после вставки элемента для несбалансированных деревьев?

Цитата Сообщение от PointsEqual Посмотреть сообщение
А мне хотелось бы чтобы root всегда указывал на вершину.
Так и есть.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 13:19
Цитата Сообщение от fasked Посмотреть сообщение
Чем, интересно, рекурсивная реализация некорректна?
Моей невнимательностью.(
0
ниначмуроФ
 Аватар для PointsEqual
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
23.03.2011, 14:10  [ТС]
fasked,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    int main()
{
    bst klen;
 
    binaryNode* p_root = klen.getRoot();
    klen.insert(p_root, 8 );
    klen.insert(p_root, 6 );
   // p_root = klen.getRoot();
    klen.insert(p_root, 12 );
 
 
    klen.inorder(p_root);
 
  return 0;
}
если я расскоментирую строку, то inorder выведет только последнее добавленное число(12), следовательно root указывает не на вершину все таки

Добавлено через 7 минут
Цитата Сообщение от Deviaphan Посмотреть сообщение
Мне не видно, чтобы insert изменял root.
insert изменяет не совсем root, а указатель на root
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
23.03.2011, 14:14
А должен изменять левый или правй узел в руте.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.03.2011, 14:14
Помогаю со студенческими работами здесь

Добавление элемента в бинарное дерево
Добрый вечер, помогите написать метод добавления в бинарное дерево. Я написал вот такой код: class word_translate { private: char...

Добавление элемента в обычное бинарное дерево
Доброго времени суток, форумчане! Начинаю реализовывать бинарное дерево (обычное, НЕ поиска) и сразу столкнулась с проблемой - добавление...

Шаблон функции-члена: добавление элемента в дерево
У меня есть тест, в котором есть такой вот вопрос: Напишите шаблон метода функции-члена добавления элемента шаблонного класса, реализующего...

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

Дерево поиска
Здравствуйте, хочу написать set на базе КЧ-дерева, начал с обычного дерева и столкнулся с ошибками, буду очень благодарен за помощь. ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru