#include <iostream>
#include <map>
using namespace std;
struct Node {
int info;
Node * left;
Node * right;
} * tree;
void Add( int a, Node ** tree) {
if ( ( * tree) == NULL ) {
( * tree) = new Node;
( * tree) - > info = a;
( * tree) - > left = ( * tree) - > right = NULL ;
return ;
}
if ( a > ( * tree) - > info) {
Add( a, & ( * tree) - > right) ;
} else {
Add( a, & ( * tree) - > left) ;
}
}
void Print( Node * tree) {
if ( tree == NULL ) {
return ;
}
cout << tree- > info << endl;
Print( tree- > left) ;
Print( tree- > right) ;
}
void Count( Node* tree, map< int ,int > & m, int level)
{
m[ level] ++ ;
if ( tree- > left) Count( tree- > left,m,level+ 1 ) ;
if ( tree- > right) Count( tree- > right,m,level+ 1 ) ;
}
int main( ) {
int n;
int info;
cout << "Enter number of elements: " ; cin >> n;
for ( int i = 0 ; i < n; i++ ) {
cout << "Enter " << i + 1 << " elements: " ; cin >> info;
Add( info, & tree) ;
}
cout << "Tree: " << endl;
Print( tree) ;
map< int ,int > m;
Count( tree,m,0 ) ;
for ( auto i: m)
{
cout << "На уровне " << i.first << " находится " << i.second << "узлов.\n " ;
}
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IE5vZGUgewogICAgaW50IGluZm87CiAgICBOb2RlICpsZWZ0OwogICAgTm9kZSAqcmlnaHQ7Cn0gKnRyZWU7Cgp2b2lkIEFkZChpbnQgYSwgTm9kZSAqKnRyZWUpIHsKICAgIGlmICgoKnRyZWUpID09IE5VTEwpIHsKICAgICAgICAoKnRyZWUpID0gbmV3IE5vZGU7IAogICAgICAgICgqdHJlZSktPmluZm8gPSBhOwogICAgICAgICgqdHJlZSktPmxlZnQgPSAoKnRyZWUpLT5yaWdodCA9IE5VTEw7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGEgPiAoKnRyZWUpLT5pbmZvKSB7CiAgICAgICAgQWRkKGEsICYoKnRyZWUpLT5yaWdodCk7CiAgICB9IGVsc2UgewogICAgICAgIEFkZChhLCAmKCp0cmVlKS0+bGVmdCk7CiAgICB9Cn0KCnZvaWQgUHJpbnQoTm9kZSAqdHJlZSkgewogICAgaWYgKHRyZWUgPT0gTlVMTCkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIGNvdXQgPDwgdHJlZS0+aW5mbyA8PCBlbmRsOwogICAgUHJpbnQodHJlZS0+bGVmdCk7CiAgICBQcmludCh0cmVlLT5yaWdodCk7Cn0KCnZvaWQgQ291bnQoTm9kZSogdHJlZSwgbWFwPGludCxpbnQ+Jm0sIGludCBsZXZlbCkKewogICAgbVtsZXZlbF0rKzsKICAgIGlmICh0cmVlLT5sZWZ0KSAgQ291bnQodHJlZS0+bGVmdCxtLGxldmVsKzEpOwogICAgaWYgKHRyZWUtPnJpZ2h0KSBDb3VudCh0cmVlLT5yaWdodCxtLGxldmVsKzEpOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBuOwogICAgaW50IGluZm87CiAgICBjb3V0IDw8ICJFbnRlciBudW1iZXIgb2YgZWxlbWVudHM6ICI7IGNpbiA+PiBuOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgY291dCA8PCAiRW50ZXIgIiA8PCBpICsgMSA8PCAiIGVsZW1lbnRzOiAiOyBjaW4gPj4gaW5mbzsKICAgICAgICBBZGQoaW5mbywgJnRyZWUpOwogICAgfQogICAgY291dCA8PCAiVHJlZTogIiA8PCBlbmRsOwogICAgUHJpbnQodHJlZSk7CgogICAgbWFwPGludCxpbnQ+IG07CiAgICBDb3VudCh0cmVlLG0sMCk7CiAgICBmb3IoYXV0byBpOiBtKQogICAgewogICAgICAgIGNvdXQgPDwgItCd0LAg0YPRgNC+0LLQvdC1ICIgPDwgaS5maXJzdCA8PCAiINC90LDRhdC+0LTQuNGC0YHRjyAiIDw8IGkuc2Vjb25kIDw8ICLRg9C30LvQvtCyLlxuIjsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=