Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
slipp1
13 / 12 / 1
Регистрация: 09.11.2012
Сообщений: 367
Записей в блоге: 1
#1

Удаление корня двоичного дерева - C++

11.02.2013, 03:56. Просмотров 2854. Ответов 22
Метки нет (Все метки)

двоичное дерево состоит только из
C++
1
ptr
корень двоичного дерева

как удалить этот корень?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2013, 03:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление корня двоичного дерева (C++):

Пример двоичного дерева - C++
Здравствуйте! Возникла мысль попробовать реализовать двоичное дерево в c++ для этого решил сначала рассмотреть какие-нибудь примеры в...

Алгоритм реализации двоичного дерева - C++
Нужно написать реализацию двоичного дерева с использованием шаблонов в упрощенном виде следуя конвенциям STL контейнеров. Основные...

Проверка корректности двоичного дерева - C++
Здравствуйте! Задача такая, Свойство двоичного дерева поиска можно сформулировать следующим образом: для каждой вершины дерева V...

Помогите сделать обход двоичного дерева - C++
Есть некий проект (большой, несколько файлов), где происходит процессы со списком (добавление, удаление и т. д.). Структура: /** *...

Вывести все вершины двоичного дерева - C++
Двоичное дерево задано в виде: m,g],s,y]] Как с помощью стека вывести это на экран? Набросайте, кому не трудно алгоритм) просто...

Как можно совершить обход двоичного дерева нерекурсивно - C++
Доброго времени суток. Хочу поинтересоваться: как можно совершить обход двоичного дерева нерекурсивно(!!!), желательно с примерами или...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
11.02.2013, 16:33 #16
дерево пусто,
или же
единственные варианты с листами на которые можно сослаться это левый и правые потомки корня.
вы определитесь, если есть потомки, и слева и права что то есть, то тогда надо, 1 запомнить адрес корня, потом в ту переменную в который был корень занести лево/право а потом удалять корень через временную переменную
slipp1
13 / 12 / 1
Регистрация: 09.11.2012
Сообщений: 367
Записей в блоге: 1
11.02.2013, 16:40  [ТС] #17
Цитата Сообщение от Nixy Посмотреть сообщение
или же вы определитесь, если есть потомки
потомков нет, в дереве остался только корень - одно значение.

Добавлено через 4 минуты
Цитата Сообщение от Nixy Посмотреть сообщение
или же вы определитесь, если есть потомки, и слева и права что то есть, то тогда надо, 1 запомнить адрес корня, потом в ту переменную в который был корень занести лево/право а потом удалять корень через временную переменную
C++
1
2
3
TreeNode<NODETYPE>* node=ptr;
        ptr=ptr->leftPtr;
        delete node;
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
11.02.2013, 17:19 #18
если дерево уже пустое, то и удаляй просто так

Добавлено через 1 минуту
тебе же говорят о том что если оно не пустое, а корень надо убрать то выбирается лист в качестве корня,заменяется,а корень чтоб удалить надо запомнить,если и так все пусто, то и вопрос глупый
slipp1
13 / 12 / 1
Регистрация: 09.11.2012
Сообщений: 367
Записей в блоге: 1
11.02.2013, 17:22  [ТС] #19
корень передавал фун-ии по ссылке

в корне число 49, левый и правый потомки равны нулю (их нет)

просто обнулил корень

варианты удаления, работает:
1.
C++
1
(*ptr)=NULL;
2.
C++
1
rootPtr=0;
3.
C++
1
(*ptr)=(*ptr)->leftPtr;
и т.д.

что есть не правильным с точки зрения внутренностей, памяти и т.п.??
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
11.02.2013, 17:23 #20
C++
1
(*ptr)=(*ptr)->leftPtr;
вот это неверно
slipp1
13 / 12 / 1
Регистрация: 09.11.2012
Сообщений: 367
Записей в блоге: 1
11.02.2013, 17:27  [ТС] #21
Цитата Сообщение от Nixy Посмотреть сообщение
C++
1
(*ptr)=(*ptr)->leftPtr;
вот это неверно
почему?
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
11.02.2013, 17:35 #22
если ты перед этим в ptr NULL положил , что ты достать то хочешь?
slipp1
13 / 12 / 1
Регистрация: 09.11.2012
Сообщений: 367
Записей в блоге: 1
11.02.2013, 17:45  [ТС] #23
это три разных варианта исполнения
Цитата Сообщение от slipp1 Посмотреть сообщение

варианты удаления, работает:
1.
C++
1
(*ptr)=NULL;
2.
C++
1
rootPtr=0;
3.
C++
1
(*ptr)=(*ptr)->leftPtr;
и т.д.
C++
1
(*ptr)=(*ptr)->leftPtr;
в этом случае я устанавливаю корень на его левого потомка - который есть пустым

Добавлено через 1 минуту
Цитата Сообщение от Nixy Посмотреть сообщение
тебе же говорят о том что если оно не пустое
а я же говорил что оно пустое
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2013, 17:45
Привет! Вот еще темы с ответами:

Создать класс [B]TreeChar[/B], для работы с элементами двоичного дерева - C++
Создать класс TreeChar, для работы с элементами двоичного дерева ASCII-символов. В качестве членов-данных рекомендуется брать элементы...

Англо-русский словарь построен в виде двоичного дерева в программе с++ - C++
Англо-русский словарь построен в виде двоичного дерева. Каждая компонента содержит английское слово, соответствующее ему русское слово и...

Частотный словарь из слов текстового файла в виде дерева двоичного поиска - C++
Задача: Построить частотный словарь из слов текстового файла в виде дерева двоичного поиска. Вывести его на экран в виде дерева....

Написать рекурсивную процедуру, которая печатает ключи всех вершин двоичного дерева - C++
Необходимо написать рекурсивную процедуру, которая печатает ключи всех вершин двоичного дерева. Двоичное дерево задастся в файле в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.02.2013, 17:45
Ответ Создать тему
Опции темы

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