Задачка с бинарным деревом

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
artyomdoc
Сообщения: 11
Зарегистрирован: 13 дек 2013, 16:59

вывести количество вершин на заданном уровне в дереве бинарном
помоги исправить, и с концом проги ничего не придумаю нормального

Код: Выделить всё

#include<iostream>
using namespace std

class tree
{
public:
int inf;
tree* right;
tree* left;
tree* root;
void init()
{
root=new tree;
root->left=NULL;
root->right=NULL;
root->NULL;
}

void add(int x,tree*&root)
{
if (root==NULL)
{
root=new tree;
root->left=root->right->NULL;
root->inf=x;
}
else if (x>root->inf)
add (x,root->right);
else add(x,root->left);
}

void del(tree *&root)
{
if (root!=NULL)
{
del(root->left);
del(root->right);
delete root;
}
}

void image (tree *&root)
{
if (root->left);
cout«" "«root->inf«" ";
image(root->right);
}
} 

void na_ur(tree *&root,int &x)
{
if (root!=NULL)
{
mas[i]++;
i++;
na_ur(root->right,i,mas)
na_ur(root->left,i,mas)
};
}
}
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Что за mas, что за i? Чтобы посчитать количество вершин на уровне n, достаточно погрузиться на n уровней рекурсивных вложенностей и увеличить счётчик, если вершина не пустая. Как-то так:

Код: Выделить всё

int nCount = 0;
int n;

void calc_nodes_with_level_n(tree* t, int level)
{
   if (t != NULL)
   {
      if (level == n) ++nCount;
      else if (level < n)
      {
         calc_nodes_with_level_n(t->right, level + 1);
         calc_nodes_with_level_n(t->left, level + 1);
      }
   }
}

int main()
{
   ...

   cout << "Enter level: ";
   cint >> n;
   calc_nodes_with_level_n(root, 0);
   cout << "Count of nodes with level " << n << " is " << nCount << endl;

   ...
}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить