Δυαδικό πρόβλημα αναζήτησης δέντρο

ψήφοι
-2

Είμαι αντιμετωπίζει σφάλμα κατάτμησης σε αυτό το πρόγραμμα. Η ροή φαίνεται να είναι σωστή και κατάλαβα ότι είναι. Παρακαλώ, να με βοηθήσει να βρείτε το λάθος σε αυτό το πρόγραμμα.

#include<iostream>
#include<cstdlib>

using namespace std; 

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

typedef struct node* Node; 
void insert(Node,int); 
Node root = NULL; 
int main() 
{ 
    insert(root,2); 
    insert(root,1); 
    insert(root,3); 

    cout<<root->data<< <<root->left->data<< <<root->right->data<<endl; 
    return 0; 
} 

void insert(Node nod,int val) 
{ 
    if(nod == NULL) 
    {
        Node newnode = new(struct node); 
        newnode->data = val; 
        newnode->left = NULL; 
        newnode->right = NULL; 
        nod = newnode; 
        if(root == NULL) 
        { 
            root = newnode; 
        } 
    } 
    else if(nod->data > val) 
    { 
        insert(node->left,val); 
    } 
    else if(nod->data < val) 
    {  
        insert(nod->right,val); 
    } 
}
Δημοσιεύθηκε 04/09/2011 στις 11:23
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
5

Δεν υπάρχει τίποτα που πραγματικά θέτει root->leftή root->right. Οι κλήσεις για insert(node->left, val)να μην κάνουν ό, τι νομίζετε ότι θα κάνει. Για να τροποποιήσετε πραγματικά τα αριστερά και δεξιά δείκτες, θα πρέπει να περάσει τη διεύθυνση των δεικτών για την εισαγωγή. δηλαδή insert(&node->left, val), και να αλλάξετε insertγια να το χειριστεί.

Απαντήθηκε 04/09/2011 στις 11:40
πηγή χρήστη

ψήφοι
0

είναι απλό. Αλλάξτε ένθετο σας:

void insert(Node &nod,int val) 
{ 
  if(nod == NULL) {

    Node newnode = new(struct node); 
    newnode->data = val; 
    newnode->left = NULL; 
    newnode->right = NULL; 
    nod = newnode; 
  } 
  else if(nod->data > val) 
    { 
      insert(nod->left,val); 
    } 
  else if(nod->data < val) 
    {  
      insert(nod->right,val); 
    } 
}
Απαντήθηκε 04/09/2011 στις 11:44
πηγή χρήστη

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