Скачиваний:
15
Добавлен:
18.03.2018
Размер:
1.27 Кб
Скачать
//Построить полное бинарное дерево уровня 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] << ' ';
}
Соседние файлы в папке Дерево