0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 48
|
||||||
1 | ||||||
Функция удаления листа (или ветки) бинарного дерева18.05.2014, 16:32. Показов 10807. Ответов 15
Метки нет Все метки)
(
Здравствуйте программисты! Учусь на первом курсе. Возникли проблемы с разработкой функции удаления ветки листа или корня из дерева. Т.е. удаление из дерева по ключу любого элемента. код не работает. три дня сижу запарился с ней. Помогите пожалуйста
вот код: Кликните здесь для просмотра всего текста
0
|
|
18.05.2014, 16:32 | |
Ответы с готовыми решениями:
15
Вывод левой ветки бинарного дерева
Удаление листа бинарного дерева |
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
18.05.2014, 16:34 | 2 |
Что за загадочная ветка листа? Не изобретай прорывов в биологии.
0
|
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 48
|
|
18.05.2014, 16:36 [ТС] | 3 |
Ветка это лист с детьми. нам так преподаватель объяснял. у листа нет потомков, у ветки есть 1 или два потомка, а корень это начало дерева
0
|
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
18.05.2014, 16:46 | 4 |
Я знаю, что такое ветвь дерева и лист. Мне не понятно, что такое ветка листа.
Добавлено через 2 минуты Кстати, потомки бывают у узлов, а не ветвей.
0
|
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 48
|
|
18.05.2014, 16:51 [ТС] | 5 |
Я опечатался. Прошу прощения. Переформулирую то что написал в самом начале. У меня не получается написать функцию удаления, которая будет удалять как лист так и ветку. т.е. элемент с потомками и без потомков. Причем удаление с потомками происходит по след алгоритму: от удаляемого элемента спускаемся вправо 1 раз, и потом влево до того момента пока влево не кончатся связи. и этот элемент ставим на место удаляемого
Добавлено через 2 минуты Исправил опечатку
0
|
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
18.05.2014, 16:52 | 6 |
Ветвь - это часть дерева, содержащая несколько узлов дерева, причём, каждый узел ветви кроме одного является непосредственным потомком (ребёнком) другого узла той же ветви и каждый узел ветви кроме одного является непосредственным предком (родителем) ровно одного другого узла той же ветви. То есть ветвь есть поддерево, вырожденное в линейный список.
0
|
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 48
|
|
18.05.2014, 16:52 [ТС] | 7 |
0
|
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
18.05.2014, 16:56 | 8 |
Тогда должен понимать, что потомков она не имеет, так как она - не отдельный узел, а совокупность узлов.
0
|
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 48
|
|
18.05.2014, 16:57 [ТС] | 9 |
Ты сможешь мне помочь?
0
|
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
18.05.2014, 16:57 | 10 |
У мера могут быть дети, у города нет. Дети могут быть жителями города, но это дети других людей, ни как не города.
0
|
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 48
|
|
18.05.2014, 17:17 [ТС] | 11 |
Люди, помогите пожалуйста
0
|
71 / 45 / 24
Регистрация: 11.05.2014
Сообщений: 179
|
|
18.05.2014, 17:37 | 12 |
Люди-то помогут, да вот алгоритм у Вас кривой изначально.
1. При удалении не учитывается, что удаляемых элементов с одинаковым ключом может быть несколько. 2. После удаления должна производиться балансировка дерева, а у Вас же ТОЛЬКО удаляется лист дерева, а если попали не на лист, тогда что?? 3. Кто же рекурсию использует при работе с большими деревьями?? А если стэк переполнится??
0
|
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 48
|
|
18.05.2014, 17:42 [ТС] | 13 |
Дак вот в этом то и проблема, я 5 раз с нуля пробовал переписывать функцию, на пятый психанул и пошел сюда с незаконченной функцией. я как думаю. для начала нужно сделать функцию удаления общую, потом ее улучшать и модернизировать. т.е. сначала сделать что б удаляла хоть правильно а потом уже предусматривать всякие случаи.
а проблема в том то и есть что не удаляет правильно, эта незаконченная вообще не удаляет
0
|
71 / 45 / 24
Регистрация: 11.05.2014
Сообщений: 179
|
|
18.05.2014, 17:45 | 14 |
http://ru.wikipedia.org/wiki/%... 8REMOVE.29
тут все разжевано
0
|
4203 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
18.05.2014, 18:33 | 15 |
Кто сказал? Мало ли для каких целей у него дерево? Может ключ непосредственно отражает положение в дереве?
Добавлено через 1 минуту А как же без рекурсии работать с деревом? Оно само рекурсивно: Добавлено через 2 минуты Даже если дерево и может иметь тысячи уровней, то при гигантской памяти. В ней проблема раздуть стек до пары гуглов зеттабайт? Не верю.
0
|
18.05.2014, 19:24 | 16 | |||||
Ваш код, подредактированный и работающий - всё узлы дерева последовательно удаляются, начиная с любого.
1) Узел, который удаляем 2) Родительский узел узла 1 3) Самый левый лист в правой поддереве узла 1 4) Родительский узел узла 3 P.P.S. Лучшее объяснение двоичных деревьев находил в Кормене когда-то давно.
0
|
18.05.2014, 19:24 | |
Помогаю со студенческими работами здесь
16
Удаления узла из бинарного дерева поиска Алгоритм удаления узла из бинарного дерева Итерационный метод удаления бинарного дерева Написать подпрограмму удаления элемента из бинарного дерева Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |