Добавил:
FluffyUnicorn
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Структуры данных примеры / Дерево / tree_N_mas
.cpp//Построить полное бинарное дерево уровня N, в котором значения каждого узла равны номеру уровня.
//Векторная структура хранения
#include <cstdlib>
#include <iostream>
using namespace std;
class tree
{
int * data;
unsigned int cur, k;
public:
tree(int n=-1);
~tree();
void sim ();
void pop ();
void add (int x);
};
int main(int argc, char *argv[])
{
int N;
cout << "N = ";
cin >> N;
tree t(N);
int i, j, z=1;
for (i=0; i<=N; i++,z*=2)
for (j=1; j<=z; j++)
t.add(i);
t.pop(); cout << endl;
t.sim(); cout << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
tree::tree (int n)
{
if (n>-1)
data = new int[(1<<n+1)-1];
else
data = NULL;
cur=1; k=0;
}
tree::~tree()
{
delete[] data;
}
void tree::sim ()
{
if (cur*2<=k) {cur*=2; sim(); cur/=2;} //if ((cur<<1)<=k) {cur<<=1; sim(); cur>>=1;}
cout << data[cur-1] << ' ';
if (cur*2+1<=k) {cur=cur*2+1; sim(); cur/=2;} //if (cur*2+1<=k) {cur=(cur<<1)+1; sim(); cur>>=1;}
}
void tree::add (int x)
{
data[k]=x;
k++;
}
void tree::pop ()
{
for (int i=0; i<k; i++)
cout << data[i] << ' ';
}
Соседние файлы в папке Дерево