1

Тема: Не знаю як переробити блок-схему до функції

Сама програма:

#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;

}
Post's attachments

insrt.jpg 331.87 kb, 110 downloads since 2017-06-27 

Подякували: 0xDADA11C71

2

Re: Не знаю як переробити блок-схему до функції

Прихований текст
"Дак" - це типу прояв боротьби москаля і українця?
Говоріть українською! Живіть українською! Відчувайте українською!

3

Re: Не знаю як переробити блок-схему до функції

FakiNyan написав:
Прихований текст
"Дак" - це типу прояв боротьби москаля і українця?

ХАХА) Та ні, просто коли запитував на іншому форумі, переробив блок-схему

4

Re: Не знаю як переробити блок-схему до функції

У вас функція повертає тип void, а повинна повертати об'єкт типу TreeNode:

TreeNode *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;
}
Because tomorrow may be gone.
Подякували: laketych1