leshqow
@leshqow
-l-

Как осмыслить рекурсивную функцию вывода двоичного дерева поиска в консоль?

Речь о функции Print. Как я её вижу ?
1. В качестве параметра заходит последнедобавленный элемент дерева ? И непонятно для чего передавать второй параметр int. Собственно не разобравшись с параметрами не могу ничего понять в самой функции.

#include <iostream>
#include <cmath>
#include <vector>
using namespace std;

struct BinTree{
	int value;
	BinTree* left;
	BinTree* right;
};
void newBinTree(int val, BinTree** Tree) { // пам1 знач, пам2 указ на указ
	if ((*Tree) == NULL){ // пам2 нулл? ...
		(*Tree) = new BinTree;
		(*Tree)->value = val;
		(*Tree)->left = (*Tree)->right = NULL; // полям left и right присвоить null
		return;
	}
	if (val > (*Tree)-> value){ // если переданное больше предыдущего
		newBinTree(val, &(*Tree)->right); // поместить его в право, передается параметр, и второй параметр ссылка на добавляемый и в право
	} else {
		newBinTree(val, &(*Tree) -> left); // иначе в левый
	}
}

void Print(BinTree**Tree, int l){
	int i;
	if (*Tree != NULL) {
		Print(&((**Tree).left), l + 1);
		for (i = 1; i <= l; i++){
			cout << " ";
		}
		cout << (**Tree).value << endl;
        Print(&((**Tree).right), l + 1);

	}
}

int main() {
	 BinTree* Tree = NULL; // создаем указатель на структуру и присваиваем ему null (ноль) по умолчанию, в tree хранится адрес указателя
	 vector<int> result;
	 vector<int> numbers = {8, 3, 10, 1, 6, 14, 4, 7, 13};
	 for(auto k : numbers) {
	    newBinTree(k, &Tree); // после первой итерации tree будет уже объект корень
	    }
	 Print(&Tree, 0);

return 0;
}
  • Вопрос задан
  • 1399 просмотров
Решения вопроса 1
sgjurano
@sgjurano
Разработчик
Здесь приведена реализация inorder-обхода дерева, хоть и довольно-таки страшненькая.

Передаваемое число — это просто число пробелов перед самой вершиной.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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