Тема: Не знаю як переробити блок-схему до функції
Сама програма:
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int value;
struct TreeNode* left;
struct TreeNode* right;
};
void *insert(struct TreeNode* , int );
void inOrder(struct TreeNode *);
void preOrder(struct TreeNode *);
void postOrder(struct TreeNode *);
int minimal(struct TreeNode *);
int main()
{
struct TreeNode *root = NULL;
int number, value, i;
printf("How many data's do you want to insert: ");
scanf_s("%d", &number);
for (i = 0; i < number; i++) {
printf("Data %d: ", i + 1);
scanf_s("%d", &value);
root = insert(root, value);
}
printf("\n");
printf("Inorder Traversal: ");
inOrder(root);
printf("\n");
printf("Preorder Traversal: ");
preOrder(root);
printf("\n");
printf("Postorder Traversal: ");
postOrder(root);
printf("\n");
printf("\n");
return 0;
}
void *insert(struct TreeNode* rootPtr, int data) {
if (rootPtr == NULL)
{
rootPtr = (struct TreeNode *)malloc(sizeof(struct TreeNode));
rootPtr->value = data;
rootPtr->left = NULL;
rootPtr->right = NULL;
}
else if (data < rootPtr->value) {
rootPtr->left = insert(rootPtr->left, data);
}
else {
rootPtr->right = insert(rootPtr->right, data);
}
return rootPtr;
}
void inOrder(struct TreeNode* rootPtr)
{
if (rootPtr != NULL) {
inOrder(rootPtr->left);
printf("%d ", rootPtr->value);
inOrder(rootPtr->right);
}
}
void preOrder(struct TreeNode* rootPtr)
{
if (rootPtr != NULL) {
printf("%d ", rootPtr->value);
preOrder(rootPtr->left);
preOrder(rootPtr->right);
}
}
void postOrder(struct TreeNode* rootPtr)
{
if (rootPtr != NULL) {
postOrder(rootPtr->left);
postOrder(rootPtr->right);
printf("%d ", rootPtr->value);
}
}
Не знаю як переробити блок-схему функції *insert(знаю що щось не так в операторі if(data<rootPtr->value), але як переробити незбагну):
void *insert(struct TreeNode* rootPtr, int data) {
if (rootPtr == NULL)
{
rootPtr = (struct TreeNode *)malloc(sizeof(struct TreeNode));
rootPtr->value = data;
rootPtr->left = NULL;
rootPtr->right = NULL;
}
else if (data < rootPtr->value) {
rootPtr->left = insert(rootPtr->left, data);
}
else {
rootPtr->right = insert(rootPtr->right, data);
}
return rootPtr;
}