| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [C/C++]переписать элементы бин. дерева в массив |
| Автор: bobr 10.5.2007, 20:08 |
| Друзья, существует такой вопрос: есть двоичное дерево, заполненное целыми числами. Можно ли, организовав обход по дереву, переписать содержимое всех его элементов в массив? Я пробовал написать программу, но сложность в том, что программа обхода по дереву рекурсивная и по окончании дает сразу несколько чисел->так их в массив не запишешь! |
| Автор: keenara 10.5.2007, 20:11 |
| Конечно можно! В чём проблема собственно? Каждый раз когда дошёл до листа записываешь его значение в массив и делаешь инкремент индекса массива. Рекурсия этому совершенно не мешает. Ты как я поняла с помощью функции обхода получаешь несколько чисел - путь по дереву, так вот, нам это не нужно, нам нужно всего лишь листы переписать, причём делать это прямо внутри процедуры обхода. |
| Автор: bobr 10.5.2007, 20:31 |
| keenara, проблема в том, что если заполнять массив в функции, из-за рекурсии он будет обнуляться. Ты не напомнишь, как вызывать в функцию массив "по значению"? |
| Автор: Kuvaldis 10.5.2007, 20:37 | ||
bobr,
Передавай индекс массива или по ссылке, или как указатель |
| Автор: keenara 10.5.2007, 20:42 | ||||
Никакой проблемы тут нет. Она возникает если массив локальный. Но мы не дураки и объявим его глобальным. И все будет зер гут
Нельзя передать массив в функцию по значению. Так можно только отдельные элементы передать. Чтобы весь массив передать, нужно его по указателю или по ссылке передать. По указателю например так - передается указатель на первый элемент и длина массива. |
| Автор: Kuvaldis 10.5.2007, 20:49 | ||
keenara,
Плохое решение с алгоритмической точки зрения и точки зрения безопасности Нужен локальный массив. Одно из решений я привел |
| Автор: keenara 10.5.2007, 20:52 | ||
Конкретно в этой задаче глобальный массив нам не может особо повредить, возможно даже упростит внешний вид кода. Но в глобальном смысле ты конечно прав |