Нужно определить высоту узла. Думаю, нужно при помощи функции обхода дерева подсчитать высоту, вот только с реализацией проблемы.
#include <iostream>
#include <fstream>
#include <cmath>
#include <queue>
using namespace std;
ifstream in ("input.txt");
struct tree {
int inf;
tree *right;
tree * left ;
};
tree *node(int x){
tree *n = new tree;
n->inf = x;
n->left = n->right = NULL;
return n;
}
void create(tree *&tr, int n){
int x;
if (n > 0){
in >> x;
tr = node(x);
int nl = n/2;
int nr = n - nl - 1;
create ( tr->left, nl);
create ( tr->right,nr);
}
}
void preorder(tree *tr){
if (tr) {
cout << tr->inf << " ";
preorder( tr->left);
preorder( tr->right);
}
}
void preor(tree *tr){
if (tr)
{
preor( tr->left);
preor( tr->right);
}
}
int height(tree *tr,int uz){
int k=0;
if (tr)
if( tr->inf==uz)
{
preor( tr);
k++;
}
return k;
}
int lefth(tree *tr){
int k = 0;
tree *x = tr;
while (x){
k++;
x = x->left;
}
return k - 1;
}
int righth(tree *tr){
int k = 0;
tree *x = tr;
while (x){
k++;
x = x->right;
}
return k - 1;
}
void add(tree *&tr, int x){
tree *n = node(x);
tree *y = tr;
if (lefth ( tr ) == righth(tr)){
do{
y = y->left;
}
while (y->left);
if (!y->left) y->left = n;
else y->right = n;
}
else{
do{
y = y->right;
}
while (y->right);
if (!y->left) y->left = n;
else y->right = n;
}
}
void find(tree *tr, int x, tree *&res){
if (tr){
if (tr->inf == x){
res = tr;
}
else {
find ( tr->left, x, res);
find ( tr->right, x, res);
}
}
}
void print(tree *tr, int k){
if (! tr ) cout << "Empty tree\n";
else{
queue<tree*> cur, next;
tree *r = tr;
cur.push(r);
int j = 0;
while (cur.size()){
if (j == 0) {
for (int i = 0; i < (int)pow(2.0, k) - 1; i++)
cout << ' ' ;
}
tree *buf = cur.front () ;
cur.pop();
j++;
if (buf){
cout << buf->inf;
next.push(buf->left);
next.push(buf->right);
for (int i = 0; i < (int)pow(2.0, k + 1) - 1; i++)
cout << ' ';
}
if (!buf){
for (int i = 0; i < (int)pow(2.0, k + 1) - 1; i++)
cout << ' ';
cout << ' ';
}
if(cur.empty()){
cout << endl;
swap(cur, next);
j = 0;
k--;
}
}
}
}
int main(){
int h;
int uz;
tree *tr = NULL;
int n, x;
in >> n;
create ( tr , n);
int k = int (log((float)n)/log((float)2.0));
print ( tr , k);
preorder( tr );
cout<<"x=";
cin>>uz;
h=height(tr, uz);
cout<<h;
cout << endl;
system("pause");
return 0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Возникла проблемаЯ изучил абсолютно все, что смог найти
Определенное количество кнопок создается с помощью Repeater(ListModel)Как обратится к определенной кнопки и узнать ее параметры(X, Y)? main
Буквально в конце написания проекта столкнулся с такой проблемой, что не могу придумать как посчитать количество файлов в папке, чтобы создать...