#include <stdio.h>
#include <stdlib.h>
Создание узла
Эта структура создает тип данных struct node
struct node
{
int data;
struct node *left, *right;
} * newnode;
Создать функцию
create()
- Сначала он выделяет память, необходимую для узла. Когда пользователь вводит данные, он рекурсивно вызывает себя для создания своего дочернего узла, и этот процесс продолжается. Когда пользователь вводит -1, рекурсия завершается и возвращается из того места, где она была вызвана.
struct node *create()
{
int x;
newnode = (struct node *)malloc(sizeof(struct node));
newnode->left = 0;
newnode->right = 0;
printf("Enter data(-1 for no node)\n");
scanf("%d", &x);
if (x == -1)
return 0;
newnode->data = x;
printf("Enter left child of %d\n", x);
newnode->left = create();
printf("Enter right child of %d\n", x);
newnode->right = create();
return newnode;
}
Предварительный заказ
preorder(struct node *root)
- Эта функция отображает данные дерева в порядке предварительного заказа.
void preorder(struct node *root)
{
if (root == 0)
return;
printf("%d\n", root->data);
preorder(root->left);
preorder(root->right);
}
В целях
inorder(struct node *root)
- Эта функция отображает данные дерева в неупорядоченном порядке
void inorder(struct node *root)
{
if (root == 0)
return;
inorder(root->left);
printf("%d\n", root->data);
inorder(root->right);
}
Почтовый заказ
Postorder(struct node *root)
- Эта функция отображает данные дерева в обратном порядке.
void postorder(struct node *root)
{
if (root == 0)
return;
postorder(root->left);
postorder(root->right);
printf("%d\n", root->data);
}
Основная функция
Основная функция просит пользователя создать дерево, а затем пройти по нему в соответствии с выбором, введенным пользователем. Проблема в том, что preorder, inorder и postorder не дают требуемого результата и приводят к бесконечному циклу после выполнения.
void main()
{
struct node *root;
root = 0;
int choice = 3, opt = 1;
while (opt)
{
printf("Select\n 1-for creation\n 2-for preorder\n 3-for inorder\n 4-for postorder\n");
scanf("%d", &choice);
switch (choice)
{
case 1:
root = create();
break;
case 2:
printf("Preorder is: ");
preorder(root);
break;
case 3:
printf("Inorder is: ");
inorder(root);
break;
case 4:
printf("Postorder is: ");
postorder(root);
break;
default:
printf("Invalid choice");
break;
}
printf("Wanna continue \n1-for yes\n0-for no\n");
scanf("%d", &opt);
}
}