सी में द्विआधारी खोज वृक्ष

वोट
5

मैं एक अजगर पुरुष हूँ। सी भाषा सीखना और मैं द्विआधारी खोज वृक्ष सी में मैं नीचे लिखा कोड को लागू करने की कोशिश कर रहा है, और मैं कुछ ही घंटों लेकिन, अपेक्षा के अनुरूप उत्पादन प्राप्त करने में सक्षम नहीं से कोशिश कर रहा हूँ। कृपया सहायता कीजिए!

कृप्या मुझे सही करें।

#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);
}
24/03/2010 को 11:42
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
2

आपका insertElementहमेशा एक मूल्य वापस नहीं करता है। यही कारण है कि अपने पुनरावर्ती कॉल गलत है। अपने संकलक बताओ (,, जैसे जीसीसी पर उपयोग ऐसे ही गलतियों के बारे में चेतावनी देने के लिए -Wall)।

displayTreeइसी तरह की एक त्रुटि कुछ भी नहीं लौटने जब यह एक वापस करने के लिए निर्दिष्ट किया जाता है है, TreeNode*

mainयह भी मान चाहिए (या आप यह घोषणा करनी चाहिए void)।

24/03/2010 को 11:49
का स्रोत उपयोगकर्ता

वोट
5

समस्या प्रविष्टि में है। अगर nodeहै NULLकि आप एक नया नोड बना सकते हैं और इसे वापस। लेकिन क्या होगा अगर नोड नहीं है NULL। आप सही / छोड़ दिया सबट्री करने के लिए सही परिवर्तन कर रहे हैं, लेकिन आप कुछ भी वापस नहीं कर रहे हैं।

परिवर्तन

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

सेवा मेरे:

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.
}
24/03/2010 को 11:53
का स्रोत उपयोगकर्ता

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