ulong &, ulong &, ulong &, ulong *);
// обхід дерева для підрахунку кількості об'ектовnumberofnode (ulong, ulong &);
// обхід дерева та збір об'єктів у массівcollect_obj (ulong, T *, int &);
// видалення проміжної вершини і побудови
// з об'єктів піддерев нового поддереваdelete_node_createnew (ulong);
// створення нового дерева у файлі з масиву об'ектовsplit (T *, int, int);
// видалити об'єкт з поддерева, коренева вершина якого знаходиться по указателюdel (ulong, T &);: ();// конструктор
~ BinaryTree ();// деструкторcreate (char *);// методсозданіяфайлаOpen (char *);// метод відкриття файлаadd (T &);// метод додавання об'єкта в файлdel (T & ;);// метод видалення в файлshowfile ();// метод виведення дерева на екранcompress ();// метод стиснення файлу <<(T &);// операція введення об'єкта в файл
}; :: BinaryTree () {(); = 0; = NULL;
} :: ~ BinaryTree () {(name) delete name;
} BinaryTree :: create (char * _name) {(is_open ()) close (); (_name, ios :: out | ios :: binary | ios :: trunc); (); (_name, ios :: in | ios :: out | ios :: binary | ios :: trunc); (is_open ()) {= 0; p = 0; (p, p) ;// запис нуля в початок = newchar [strlen (_name) +1]; (name, _name); 1;
} = -1, 0,
} BinaryTree :: Open (char * _name) {(is_open ()) close (); (_name, ios :: in | ios :: out | ios :: binary | ios :: ate); (is_open ()) {(0); ((char *) & root, sizeof (ulong));// чтениерасположениякорневойвершины = newchar [strlen (_name) +1]; ( name, _name); 1;
} = -1, 0,
} BinaryTree :: add (T & obj) {(root == 0) {//деревопустое (0); t = 0; ((char * ) & t, sizeof (ulong)); = createnode (obj);// ініціалізація root і вставки в нього об'єкта (0, root);// запис покажчика в початок файла1;
} else {//дерево не пустоеpushtonode (root, obj, 0);// вставка з пошуком вершини і місця
}
} BinaryTree :: createnode (T & obj) {(0, ios :: end);// позиціонування в конецrez = tellp ();// запам'ятати позіціюt = 0; (int i = 0; i <8; i + +)// ініціалізація нулями вершини ((char *) & t, sizeof (ulong)); (rez, obj, 0);// вставкаоб'ектаrez; p>
} BinaryTree :: pushtonode (ulong p, T & obj, ulong pobj) {s = sizeof (ulong); l, r, n, m [5 ]; q = 0, j, k; i; (p, l, r, n, m); (n <5) {//якщо масив не повний (r! = 0) {//якщо є праве поддеревоfobj; readvar (m [n-1], fobj); (obj> fobj) return pushtonode (r, obj, pobj);
} (l! = 0) {//якщо є ліве поддеревоfobj; readvar (m [0], fobj); (obj