2 / 2 / 3
Регистрация: 10.04.2012
Сообщений: 22
|
||||||
1 | ||||||
Удаление элемента из бинарного дерева24.01.2013, 17:32. Показов 3879. Ответов 8
Метки нет (Все метки)
в программе выполняется пару ф-й, не работает удаление элемента (в меню пункт 1), должен удалить узел где длина кода более 5, при попытке удалить крайней листок не имеющий потомков выдает, а ежели удалять элементы имеющие потомков, то когда печатает дерево выдает ту же ошибку, даю файл с деревом и ВЕСЬ код программы.
т.е. не работают: void DeleteNode (Tree ** root_adr); код сбалансированного дерева " balanced[1]": h 001 d 002 l 003 b 004 f 005 j 006 n 007 a 008 c 009 e 010 g 011 i 0121212 k 013 m 014 o 015 код не сбалансированного дерева "not balanced[2]" : d 01 b 02 j 03 a 04 c 05 g 06 m 007 f 080808 h 09 l 10 n 11 e 12 o 13
0
|
24.01.2013, 17:32 | |
Ответы с готовыми решениями:
8
Удаление узла бинарного дерева Удаление бинарного дерева и освобождение памяти Удаление элемента из бинарного дерева удаление элемента бинарного дерева |
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
|
|
24.01.2013, 18:28 | 2 |
у меня в прошлом семестре была лаба в которой нужно было реализировать некое подобие базы данных основанную на деревьях.
так вот, для удаления я добавил в структуру еще одно поле, которое обозначало удален ли элемент из дерева. то есть, фактически информация не удалялась, и, при желании ее можно было востановить. ну и соответсвенно, когда выполнялся поиск, вывод, редактирование все основывалось на этом флажке. если он установлен - увы нету такого элемента, если неустановлен - все ок - ищим, выводим, редактируем. может я просто ленивый, но помоему сделать удаление для односвязного дерева(то есть когда есть указатели left, right, но нету parent(указатель на родительский элемент) довольно сложно.
0
|
2 / 2 / 3
Регистрация: 10.04.2012
Сообщений: 22
|
|
24.01.2013, 18:47 [ТС] | 3 |
Мне такое не подойдет, у меня преподаватель очень придирчивый поэтому имеет следовать в ТС. Кстати удаления ф-я как бы правильная, просто где-то не происходит правильно удаление или замена и комп обращается к несуществующему элемента, но где ошибка не знаю ..
Добавлено через 11 минут забыл дописать, выдает ошибку segmentation fault 11
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
24.01.2013, 19:04 | 4 |
ihor, нужно связать предыдущее звено с текущим а потом освободить память. Это делается так: если след. левый потомок == значению нашего удал. элемента, то правое поддерево тек. элемента становится текущим левым потомком (встает на место удал. элемента), а указатель на левое ищет место в новом дереве начиная с правого поддерева удал. узла. После всех операций память под удал. элемент освобождается.
Лучше всего, попробуйте нарисовать это на бумаге, представить как должно быть.
1
|
2 / 2 / 3
Регистрация: 10.04.2012
Сообщений: 22
|
|
25.01.2013, 22:52 [ТС] | 5 |
Да даже если я удаляю крайней элемент, у которого нет потомков, все равно выдает ошибку segmentetion fault 11
0
|
2 / 2 / 3
Регистрация: 10.04.2012
Сообщений: 22
|
|||||||||||
26.01.2013, 17:50 [ТС] | 7 | ||||||||||
вот ф-я удаления
0
|
2 / 2 / 3
Регистрация: 10.04.2012
Сообщений: 22
|
|
29.01.2013, 19:45 [ТС] | 8 |
Ну народ ! HELP !
0
|
0 / -1 / 0
Регистрация: 11.01.2015
Сообщений: 34
|
||||||
15.05.2016, 15:29 | 9 | |||||
0
|
15.05.2016, 15:29 | |
15.05.2016, 15:29 | |
Помогаю со студенческими работами здесь
9
Реализовать удаление элемента бинарного дерева Удаление элемента из сбалансированого бинарного дерева Некорректное удаление элемента бинарного дерева поиска Удаление элемента из двоичного бинарного дерева поиска Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |