Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C/C++]переписать элементы бин. дерева в массив


Автор: bobr 10.5.2007, 20:08
Друзья, существует такой вопрос: 
есть двоичное дерево, заполненное целыми числами. Можно ли, организовав обход по дереву, переписать содержимое всех его элементов в массив?  
Я пробовал написать программу, но сложность в том, что программа обхода по дереву рекурсивная и по окончании дает сразу несколько чисел->так их в массив не запишешь!  smile 

Автор: keenara 10.5.2007, 20:11
Конечно можно!
В чём проблема собственно? Каждый раз когда дошёл до листа записываешь его значение в массив  и делаешь инкремент индекса массива. Рекурсия этому совершенно не мешает. Ты как я поняла с помощью функции обхода получаешь несколько чисел - путь по дереву, так вот, нам это не нужно, нам нужно всего лишь листы переписать, причём делать это прямо внутри процедуры обхода.

Автор: bobr 10.5.2007, 20:31
keenara, проблема в том, что если заполнять массив в функции, из-за рекурсии он будет обнуляться. Ты не напомнишь, как вызывать в функцию массив "по значению"?

Автор: Kuvaldis 10.5.2007, 20:37
bobr, 
Код

void Obhod(const Tree* root, char*  mas, int & i);

Передавай индекс массива или по ссылке, или как указатель

Автор: keenara 10.5.2007, 20:42
Цитата
проблема в том, что если заполнять массив в функции, из-за рекурсии он будет обнуляться.

Никакой проблемы тут нет. Она возникает если массив локальный. Но мы не дураки и объявим его глобальным. И все будет зер гут  smile 

Цитата
Ты не напомнишь, как вызывать в функцию массив "по значению"?

Нельзя передать массив в функцию по значению. Так можно только отдельные элементы передать.
Чтобы весь массив передать, нужно его по указателю или по ссылке передать. По указателю например так - передается указатель на первый элемент и длина массива.

Автор: Kuvaldis 10.5.2007, 20:49
keenara, 
Цитата

Никакой проблемы тут нет. Она возникает если массив локальный. Но мы не дураки и объявим его глобальным. И все будет зер гут

Плохое решение с алгоритмической точки зрения и точки зрения безопасностиsmile 
Нужен локальный массив. Одно из решений я привел 

Автор: keenara 10.5.2007, 20:52
Цитата
Плохое решение с алгоритмической точки зрения и точки зрения безопасности smile 
Нужен локальный массив.

Конкретно в этой задаче глобальный массив нам не может особо повредить, возможно даже упростит внешний вид кода.
Но в глобальном смысле ты конечно прав  smile 

Автор: Rockie 10.5.2007, 21:01
Цитата(bobr @  10.5.2007,  20:08 Найти цитируемый пост)
Я пробовал написать программу, но сложность в том, что программа обхода по дереву рекурсивная и по окончании дает сразу несколько чисел->так их в массив не запишешь!  smile   

Есть рабочий код - выкладывай, подправим  smile 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)