Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

алгоритмы / Построение дерева

.doc
Скачиваний:
94
Добавлен:
18.03.2015
Размер:
57.86 Кб
Скачать

#include <iostream.h>

#include <conio.h>

class tree

{

public:

struct node

{

int info;

node *left, *right;

};

node *pn;

/*создание нового узла*/

node * new_node (int x);

/*добавление узла к дереву*/

node * add_node(int x, node* pn);

/*обход дерева в симметричном порядке*/

void print_sim (node* pn);

/*удаление всего дерева*/

void del_tree(node*pn);

tree();

~tree();

} t;

main()

{

int mas[10] = {5, 4, 8, 2, 9, 6, 4, 1, 7, -2}, i;

for(i=0; i<10; i++) t.pn = t.add_node(mas[i], t.pn);

t.print_sim (t.pn);

getch(); return 0;

}

tree :: tree()

{

pn = NULL;

}

tree :: ~tree()

{

del_tree(pn);

}

node * tree :: new_node (int x)

{

node *ptr;

ptr = new node;

ptr->info = x;

ptr->left = ptr->right = NULL;

return ptr;

}

node * tree :: add_node(int x, node* pn)

{

node *ptr = pn;

//Если дерева не существует, то создаем его.

if (pn == NULL) return new_node (x);

//Если добавляемое значение меньше информационного поля узла, то

if (x < pn->info)

pn->left = add_node (x, pn->left);

//добавляем его в левое поддерево, иначе - в правое

else

pn->right = add_node (x, pn->right);

return ptr;

}

void tree :: print_sim (node* pn)

{

// Если левое поддерево существует,то обходим его.

if (pn->left)

print_sim (pn->left);

cout<<pn->info<<” ”;

// Попадаем в корень.

// Если существует правое поддерево, то обходим и его.

if (pn->right)

print_sim (pn->right);

}

void tree :: del_tree(node* pn)

{

//Если левое поддерево существует,удаляем его.

if (pn->left)

del_tree(pn->left);

//Если существует правое поддерево, его тоже удаляем.

if (pn->right)

del_tree(pn->right);

//Удаляем корень.

delete pn;

}