#include <iostream>
struct tree {
int data;
tree* left;
tree* right;
};
// добавление
void add_data(tree*& t, int data) {
if(t == NULL) {
t = new tree();
t->data = data;
t->left = NULL;
t->right = NULL;
return;
}
if(data < t->data)
add_data(t->left, data);
else
add_data(t->right, data);
}
// симметричный обход
void show_all(tree* t, std::ostream& hout) {
if(t == NULL)
return;
show_all(t->left, hout);
hout << t->data << ' ';
show_all(t->right, hout);
}
// чистка
void remove_all(tree* t) {
if(t == NULL)
return;
remove_all(t->left);
remove_all(t->right);
delete t;
}
// кол-во элементов на указанной глубине-x
int counter(tree* t, int x) {
if((t == NULL) || (x <= 0))
return 0;
else {
x--;
int n = counter(t->left, x) + counter(t->right, x) + 1;
return n;
}
}
int main(void){
tree* t = NULL;
for(int i = 0; i < 30; i++)
add_data(t, std::rand() % 10);
int x = 5;
int n = counter(t, x);
std::cout << "кол-во узлов на указанной глубине: " << n << std::endl;
show_all(t, std::cout);
remove_all(t);
return 0;
}