2017-07-13 2 views
-3

Salut quelqu'un peut-il m'expliquer quel est le problème ici! J'essaye de créer une fonction triée par insertion pour mon arbre et j'emploie la fonction de vide! et je suis arrivé cette erreur:création insert trié fonction vide

une valeur de type void ne peut pas être attribué à une entité de type struct treeNode

struct treeNode { 
    int data; 
    struct treeNode *left; 
    struct treeNode *right; 
}; 

typedef struct treeNode *BSTree; 

void insertSorted(BSTree *tree, int data) { 
    if (!*tree) { 
     tree = createNode(data); 
    } else 
    if (data < (*tree)->data) { 
     (*tree)->left = insertSorted((*tree)->left, data); //it's show upp here 
    } else 
     (*tree)->right = insertSorted((*tree)->right, data); 

    return tree; 
} 
+1

'vide insertSorted (arbre BSTree de *, les données int) '=>' BSTree * insertSorted (arbre BSTree *, données int) ' –

+1

Sidenote: ** never ever ** pointers' typedef'! – Olaf

+0

Je viens de lui demander s'il comprend ce typedef. J'ai peur qu'il ne veut pas comme il veut le type de retour de cette fonction pour être int :) –

Répondre

0

fonctions Void ne renvoient pas une valeur. C'est le problème. Vous devez supprimer le retour ou modifier la déclaration de fonction pour renvoyer ce pointeur

+0

Eh bien, je comprends que le vide ne retourner la valeur, mais est là de toute façon pour résoudre ce que je veux dire je peux changer la fonction de void à int mais j'ai encore besoin de le faire fonctionner par vide – JEERY

+0

vous devez changer à la BSTree * insertSorted (..... BTW faire vous comprenez ce que le type BSTree est? –

+0

Oui je fais, je m'interroge toujours au sujet du vide et est là de toute façon pour le faire fonctionner? – JEERY

4
void insertSorted(BSTree *tree, int data) 
{ 

    if (!*tree) 
    { 
     tree = createNode(data); 
    } 
    else if (data < (*tree)->data) 
    { 
    (*tree)->left = insertSorted((*tree)->left, data); //it's show upp here 
    } 
    else 
     (*tree)->right = insertSorted((*tree)->right, data); 
    return tree; 
} 

devrait être

void insertSorted(BSTree *tree, int data){ 
    if (!*tree) 
     *tree = createNode(data); 
    else if (data < (*tree)->data) 
     insertSorted(&(*tree)->left, data);//1st argument require `BSTree *tree` 
    else 
     insertSorted(&(*tree)->right, data); 
} 

ou

BSTree insertSorted(BSTree tree, int data) 
{ 

    if (!tree) 
    { 
     tree = createNode(data); 
    } 
    else if (data < tree->data) 
    { 
     tree->left = insertSorted(tree->left, data); 
    } 
    else 
    { 
     tree->right = insertSorted(tree->right, data); 
    } 
    return tree; 
} 
1

Si vous voulez écrire la fonction comme ayant le retour tapez void, puis toute déclaration de retour ne doit pas contenir d'expression et vous ne devez pas essayer d'affecter une "valeur" vide à un objet.

La fonction peut regarder la façon dont

void insertSorted(BSTree *tree, int data) 
{ 
    if (*tree == NULL) 
    { 
     *tree = createNode(data); 
    } 
    else if (data < (*tree)->data) 
    { 
     insertSorted(&(*tree)->left, data); 
    } 
    else 
    { 
     insertSorted(&(*tree)->right, data); 
    } 
} 

Voici un programme démonstratif

#include <stdio.h> 
#include <stdlib.h> 

struct treeNode 
{ 
    int data; 
    struct treeNode* left; 
    struct treeNode* right; 
}; 

typedef struct treeNode* BSTree; 

BSTree createNode(int data) 
{ 
    BSTree node = malloc(sizeof(*node)); 

    if (node) 
    { 
     node->data = data; 
     node->left = NULL; 
     node->right = NULL; 
    } 

    return node; 
} 

void insertSorted(BSTree *tree, int data) 
{ 
    if (*tree == NULL) 
    { 
     *tree = createNode(data); 
    } 
    else if (data < (*tree)->data) 
    { 
     insertSorted(&(*tree)->left, data); 
    } 
    else 
    { 
     insertSorted(&(*tree)->right, data); 
    } 
} 

void displayTree(BSTree * tree) 
{ 
    if (*tree != NULL) 
    { 
     displayTree(&(*tree)->left); 

     printf("%d ", (*tree)->data); 

     displayTree(&(*tree)->right); 
    } 
} 

int main(void) 
{ 
    BSTree tree = NULL; 
    int a[] = { 1, 5, 4, 3, 7, 8, 0 }; 
    const size_t N = sizeof(a)/sizeof(*a); 

    for (size_t i = 0; i < N; i++) 
    { 
     insertSorted(&tree, a[i]); 
    } 

    displayTree(&tree); 

    return 0; 
} 

suivant Sa sortie est

0 1 3 4 5 7 8 
+0

Merci beaucoup !!! – JEERY