Binary Search Boom in C

stemmen
5

Ik ben een Python vent. Het leren van de taal C en ik heb geprobeerd uit te voeren Binary Search Boom in C. Ik schreef de code, en ik heb geprobeerd van enkele uren, maar niet in staat om de uitvoer te krijgen zoals verwacht. Help alstublieft!

Corrigeer me.

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

typedef int ElementType;

typedef struct TreeNode {
  ElementType element;
  struct TreeNode *left, *right;
} TreeNode;

TreeNode *createTree(){
    //Create the root of tree
    TreeNode *tempNode;
    tempNode = malloc(sizeof(TreeNode));
    tempNode->element = 0;
    tempNode->left = NULL;
    tempNode->right = NULL;
    return tempNode;
}

TreeNode *createNode(ElementType X){
    //Create a new leaf node and return the pointer
    TreeNode *tempNode;
    tempNode = malloc(sizeof(TreeNode));
    tempNode->element = X;
    tempNode->left = NULL;
    tempNode->right = NULL;
    return tempNode;
}

TreeNode *insertElement(TreeNode *node, ElementType X){
    //insert element to Tree
    if(node==NULL){
        return createNode(X);
    }
    else{
        if(X < node->element){
            node->left = insertElement(node->left, X);
        }
        else if(X > node->element){
            node->right =  insertElement(node->right, X);
        }
        else if(X == node->element){
            printf(Oops! the element is already present in the tree.);
        }
    }
}

TreeNode *displayTree(TreeNode *node){
    //display the full tree
    if(node==NULL){
        return;
    }
    displayTree(node->left);
    printf(| %d , node->element); 
    displayTree(node->right);
}

main(){
    //pointer to root of tree #2
    TreeNode *TreePtr;
    TreeNode *TreeRoot;
    TreeNode *TreeChild;

    //Create the root of tree
    TreePtr = createTree();

    TreeRoot = TreePtr;

    TreeRoot->element = 32;
    printf(%d\n,TreeRoot->element);

    insertElement(TreeRoot, 8);
    TreeChild = TreeRoot->left;
    printf(%d\n,TreeChild->element);  

    insertElement(TreeRoot, 2);
    insertElement(TreeRoot, 7);
    insertElement(TreeRoot, 42);
    insertElement(TreeRoot, 28);
    insertElement(TreeRoot, 1);
    insertElement(TreeRoot, 4);
    insertElement(TreeRoot, 5);

// the output is not as expected :(
    displayTree(TreeRoot);
}
De vraag is gesteld op 24/03/2010 om 11:42
bron van user
In andere talen...                            


2 antwoorden

stemmen
2

Je insertElementhoeft niet altijd een waarde terug te keren. Dit is de reden waarom uw recursieve oproepen fout gaan. Vertel je compiler om u te waarschuwen over fouten als dat (bijvoorbeeld op gcc, gebruiken -Wall).

displayTreeheeft een soortgelijke fout, terug te keren niets wanneer het wordt gespecificeerd op een terugkeer TreeNode*.

mainmoet ook een waarde te retourneren (of je moet het te verklaren void).

antwoordde op 24/03/2010 om 11:49
bron van user

stemmen
5

Het probleem is in de insertie. Als nodeis NULLu een nieuw knooppunt te maken en terug te sturen. Maar wat als het knooppunt niet NULL. U maakt de juiste wijzigingen aan de rechts / links deelboom maar u bent niet iets terug te keren.

Verandering

if(X < node->element){
    node->left = insertElement(node->left, X);
}
else if(X > node->element){
    node->right =  insertElement(node->right, X);
}

naar:

if(X < node->element){
    node->left = insertElement(node->left, X);
    return node; // add this.
}
else if(X > node->element){
    node->right =  insertElement(node->right, X);
    return node; // add this.
}
antwoordde op 24/03/2010 om 11:53
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more