@m1kz

Как из этого сделать нормальную функцию?

Не могу допереть как сделать что-то типа рекурсии, чтобы отобразить бинарное дерево по уровням?

void print_tree(A* a,int x=0) {
	
	
	        x++;
		cout << x << "\t\t\t";
		if (!a)cout << a->count << " " << a->s << endl;
		cout << endl;

		
		x++;
		cout << x << "\t\t\t";
		if (!a->left) cout << a->left->count << " " << a->left->s << "\t";
		if (!a->right)cout << a->right->count << " " << a->right->s << "\t";
		cout << endl;
	
		x++;
		cout << x << "\t\t\t";
		if (!a->left->left)cout << a->left->left->count << " " << a->left->left->s << "\t";
		if (!a->left->right)cout << a->left->right->count << " " << a->left->right->s << "\t";
		if (!a->right->left)cout << a->right->left->count << " " << a->right->left->s << "\t";
		if (!a->right->right)cout << a->right->right->count << " " << a->right->right->s << "\t";
		cout << endl;

		x++;
		cout << x << "\t\t\t";
		if (!left->left->left)cout << a->left->left->left->count << " " << a->left->left->left->s << "\t";
		if (!a->left->left->right)cout << a->left->left->right->count << " " << a->left->left->right->s << "\t";
		if (! a->left->right->left)cout << a->left->right->left->count << " " << a->left->right->left->s << "\t";
		if (!a->left->right->right)cout << a->left->right->right->count << " " << a->left->right->right->s << "\t";
		if (!a->right->left->left)cout << a->right->left->left->count << " " << a->right->>left->left->s << "\t";
		if (!a->right->left->right)cout << a->right->left->right->count << " " << a->right->left->right->s << "\t";
		if (!a->right->right->left)cout << a->right->right->left->count << " " << a->right->right->left->s << "\t";
		if (!a->right->right->right)cout << a->right->right->right->count << " " << a->right->right->right->s << "\t";
		cout << endl;
	
}
  • Вопрос задан
  • 78 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Чтобы именно в таком виде отобразить вам нужен обход в ширину.

Заводите очередь, положите в нее корень дерева. Потом в цикле, пока очередь не пуста, берете из нее элемент, выводите, и кладете в очередь его детей. Если надо разделить по уровням глубины, то надо вместе с указателем на элемент класть в очередь его глубину. Например, кладите в очередь std::pair. Или заведите 2 очереди и работайте с ними параллельно.

На C++ можно или использовать std::queue, или просто std::vector. Во втором случае добавление в очередь будет просто push_back, а для удаления из очереди заведите счетчик, который указывает на голову. При изъятии элемента просто сдвигайте этот счетчик.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы