|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.04.2013, 10:17 | #1 |
Пользователь
Регистрация: 19.03.2013
Сообщений: 12
|
Очистка деревьем (есть код)
Написал код для создания и отображения дерева (еле еле получилось)
Код:
теперь мне нужно очистить память из под каждого элемента. Я так понимаю мне нужно написать функцию, которая будет проходит дерево до конца, обнулять последние элементы и очищать память, далее вызываться рекурсивно, чтобы очистить таким образом всё дерево Я не могу понять, что написать, чтобы пройти дерево до конца. Та же проблема была с выводом, поэтому впихнул его в функцию создания, работает. С очисткой всё сложнее если возможно напишите пример кода =/ на словах очень сложно понять |
12.04.2013, 11:30 | #2 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Да пожалуйста. Предположим, добрая фея пообещала нам, что после вызова функции clean(struct tree* t) дерево t будет удалено. Тогда... напишем функцию clean:
Код:
Также, если эта функция очищает дерево глубины n, то её вызов для дерева глубины n+1 очистит её поддеревья (глубины n) и удалит само дерево; таким образом, если функция очищает дерево глубины n, то она очищает дерево глубины n+1. Если Вы знакомы с принципом математической индукции, то всё должно быть уже понятно. Если ещё незнакомы - это он: Код:
|
12.04.2013, 11:38 | #3 | |
Пользователь
Регистрация: 19.03.2013
Сообщений: 12
|
Цитата:
теперь вопрос, который меня интересует: разве приведённый вами код не оставит висеть где-то в памяти неочищенные элементы? Или всё таки проход будет совершённ до конца? А там, если элемент не 0, то произойдёт очищение |
|
12.04.2013, 11:47 | #4 |
Пользователь
Регистрация: 19.03.2013
Сообщений: 12
|
И ешё вопрос:
итоговый код Код:
=> я должен её очистить, но если я пишу free(data); xcode пишет в конце рабочего программы вот такие строчки: alloc: *** error for object 0x100103bc0: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug Я так понимаю, что она ругается, что под data ничего выделенно не было, но это же не так |
12.04.2013, 12:07 | #5 | ||
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
Цитата:
|
||
12.04.2013, 12:21 | #6 | |
Пользователь
Регистрация: 19.03.2013
Сообщений: 12
|
Цитата:
Ещё такой вопрос: В моём коде вывод элементов дерева происходит в функции их создания. Я бы хотел отделить их, но я не знаю как совершить проход в новой функции. Ведь если я напишу в ней: Код:
А мне вообще нужно сделать вот такой вывод: 1 (первый уровень) 3 6 (второй уровень 5 7 6 7 (третий уровень) и так далее имея то, что есть сейчас не получается сделать такой вывод, потому что нужне счётчик чтоли уровней, для его отображения, так как функция построяния дерева строит сначала всю его левую ветку, а потом достраивает правые и т.д. подскажите, что можно предпринять и как это реализовать =/ |
|
12.04.2013, 12:49 | #7 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
Код:
Код:
Кстати, если немного помудрить и сделать так, чтобы output_tree_level возвращал булево значение, то можно обойтись и без tree_depth. Можете подумать над тем, как это сделать. |
|
12.04.2013, 13:39 | #8 | ||
Пользователь
Регистрация: 19.03.2013
Сообщений: 12
|
Цитата:
Цитата:
Но для начала я попробовал вывести допустим третий уровень, (а входные данные были для 4 уровневого дерева). Поробовал проверить, не отображает. Код:
и ещё, если вывести допустим только первый уровень, то выходит, что вершина равна 0: Вот если примитивным образом вывести 3 уровня (дерева высотой = 3) Последний раз редактировалось freekyn; 12.04.2013 в 14:06. |
||
12.04.2013, 14:12 | #9 | ||
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
Цитата:
А вот почему это так - подумайте пять минут самостоятельно. Подсказка: при передаче аргумента в функцию по значению, любые изменения аргумента функции не изменят оригинала. |
||
12.04.2013, 14:20 | #10 |
Пользователь
Регистрация: 19.03.2013
Сообщений: 12
|
ну в прочем подсказка это и есть ответ. Начальное значение у меня же 0
Только почему не отображаются все остальные уровни ё-маё? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
VBA код. Очистка листа и сортировка. | riniks17 | Microsoft Office Excel | 15 | 15.02.2013 15:33 |
есть код и есть ощибка в чем ощибка? | anton6262906 | Общие вопросы C/C++ | 11 | 23.12.2011 03:26 |
Есть код не могу скомпилить | D0ct0r | Общие вопросы C/C++ | 4 | 08.12.2010 20:47 |
Есть у кого код приглашения? | iamramirez | Свободное общение | 0 | 12.12.2009 23:34 |
Есть код!! | Danilyuk | Помощь студентам | 1 | 31.05.2008 00:46 |