Секция заголовка
#include <stdio.h>
#include <stdlib.h>
Структура
typedef struct bst
{
int data;
struct bst *left;
struct bst *right;
} node;
2.1 Функции
node *create();
void insert(node *, node *, node *,node *);
void preorder(node *);
Основной раздел
В этом разделе я попытался создать узел root и 2 дочерних узла, если узел root не равен нулю. Мне пришлось создать 2 дочерних для каждого родительского узла одновременно.
void main()
{
char ch;
node *root = NULL, *temp, *p, *temp1;
do
{
temp = create();
if (root == NULL)
{
root = temp;
}
else
{
temp1 = create(); /*Creation of the second child*/
p = root;
insert(root, temp, temp1,p);
}
printf("nDo you want to enter more(y/n)? ");
getchar();
scanf("%c", &ch);
} while (ch == 'y' | ch == 'Y');
printf("\nPreorder Traversal: ");
preorder(root);
}
Создать функцию
Ничего нового здесь не создано, создал переменную локального узла "Temp1" и передали ее вызывающей функции.
node *create()
{
node *temp1;
printf("\nEnter data. Type -1 if you don't want to send to someone");
temp1 = (node *)malloc(sizeof(node));
scanf("%d", &temp1->data);
if(temp1->data==-1)
{
return NULL;
}
temp1->left = temp1->right = NULL;
return temp1;
}
Секция вставки
Вот где она действительно получается грязный, потому что я пытался использовать рекурсивные вызовы, чтобы перейти через занятые или (узлы, левый и правый дочерние элементы которых уже есть), чтобы найти пустой узел с левым и правым = NULL.>
void insert(void insert(node *root, node *temp, node *temp1, node *p)
{
if (root->left == NULL && root->right == NULL)
{
root->left = temp;
root->right = temp1;
}
if (root->left != NULL && root->right != NULL) /*In case the node has left and right children*/
{
insert(root->left, temp, temp1,p); /*Finding an empty block through left sub tree*/
root=p
insert(root->right, temp, temp1,p);
}
}
В этот момент программа вошла в бесконечность l oop. Все, что я хотел сделать, - это создавать по 2 узла на каждый родительский узел одновременно, чтобы информация могла доходить до клиентов под одним и тем же провайдером в в то же время.
Обход
void preorder(node * root)
{
if (root != NULL)
{
printf("%d ", root->data);
preorder(root->left);
preorder(root->right);
}
}
Выход
Ввод данных. Введите -1, если вы не хотите отправлять кому-либо: 100
nВвести больше (да / нет)? y
Введите данные. Введите -1, если вы не хотите отправлять кому-либо: 200
Отладчик
0x00000000004007e1 во вставке (root = 0x602030, temp = 0x602030, temp1 = 0x602050,
p = 0x602010) в основном. c: 64
64 вставка (root -> left, temp, temp1, p);