Программирование на языке С. Наместников С.М. - 30 стр.

UptoLike

Составители: 

30
Объекты, из которых состоит бинарное дерево удобно представить в виде
структур. Также как и в связных списках, первая структура будет описывать
данные, хранящиеся в вершинах дерева, а вторая представлять связи между
вершинами.
typedef struct tag_data {
char name[100];
} DATA;
typedef struct tag_tree {
DATA data;
struct tag_tree* left, *right;
} TREE;
TREE* root = NULL;
Для формирования дерева введем функцию add_node(), которая в качестве
аргументов будет принимать указатель на вершину дерева, к которому
добавляются новые вершины, имя вершины и тип вершины: левая или правая.
Кроме того, данная функция будет возвращать указатель на новую созданную
вершину.
TREE* add_node(TREE* node,char* name, TYPE type = LEFT)
{
TREE* new_node = (TREE *)malloc(sizeof(TREE));
if(type == LEFT && node != NULL) node->left = new_node;
else if(node != NULL) node->right = new_node;
strcpy(new_node->data.name,name);
new_node->left = NULL;
new_node->right = NULL;
return new_node;
}
Последний аргумент функции имеет тип TYPE, который удобно
определить как перечисляемый тип:
typedef enum tag_type {RIGHT, LEFT} TYPE;
и определить параметр по умолчанию LEFT.
Для отображения дерева целесообразно воспользоваться рекурсивными
функциями show_next(), которые вызываются из функции show_tree()
следующим образом:
void show_next(TREE* node,int off)
{
if(node != NULL)
{
for(int i=0;i < off;i++) putchar(' ');
printf("%s\n",node->data.name);