2016-10-25 8 views
-1

Ich bin neu in der Datenstruktur. Ich mache ein C++ - Programm zum Einfügen eines Elements in den binären Suchbaum. Das Programm kompiliert ohne irgendeinen Fehler, aber wenn ich das Programm laufe, nachdem ich die erste Eingabe n gegeben habe, hört das Programm auf zu arbeiten. Bitte helfen Sie mir, dieses Programm richtig zu machen.Einfügen in binäre Suchbaum (C++)

Mein Code folgt oben wie:

#include<iostream> 
#include<stdio.h> 
#include<stdlib.h> 
using namespace std; 

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

struct node *root=NULL ,*par=NULL ,*pos=NULL,*save=NULL , *ptr=NULL ; 
struct node* newNode(int data) 
{ 
    struct node* newnode= (struct node*)malloc(sizeof(struct node)); 
    newnode->data=data; 
    newnode->right=NULL; 
    newnode->left=NULL; 
    return newnode; 
} 

void findpos(int data) 
{ 
    if(root==NULL) 
    { 
     par=NULL,pos=NULL; 
     return; 
    } 

    if(root->data==data) 
    { 
     par=NULL , pos=root; 
     return; 
    } 

    if(data<root->data) 
    { 
     save=root; ptr=root->left; 
    } 
    else{ 
     save=root; ptr=root->right; 
    } 
    while(ptr!=NULL) 
    { 
     if(ptr->data==data) 
     { 
      par=save; pos=ptr; 
      return; 
     } 
     if(data<ptr->data) 
     { 
      save=ptr; 
      ptr=ptr->left; 
     } 
     else{ 
      save=ptr; 
      ptr=ptr->right; 
     } 
    } 

    pos=NULL; par=save; 
    return; 
} 


void insert(int data) 
{ 
    findpos(data); 
    if(pos!=NULL) 
    { 
     return; 
    } 
    pos=newNode(data); 
    if(data<par->data) 
    par->left=pos; 

    else 
    par->right=pos; 

    return; 
} 



    int main() 
    { 
    struct node *root= newNode(4); 
    root->left=newNode(3); 
    root->left->left=newNode(2); 
    root->right=newNode(6); 

    int n; 
    cin>>n; 
    insert(n); 
    cout<<pos->data; //just trying to see if it works 
     return 0; 
    } 
+0

Deklarieren Sie Variablen wann immer sie benötigt werden und zu viele wenn sonst Bedingung in der Funktion 'findpos()'. – Shravan40

+0

Nur die Verwendung von 'cin' /' cout' macht dieses Programm nicht C++ – Slava

+2

1. Zeichnen Sie den Baum, den Sie auf einem Blatt Papier bauen möchten. 2. Führen Sie das Programm mit dem Debugger aus, der mit Ihrer Entwicklungsumgebung geliefert wurde. 3. Gehen Sie das Programm mit dem Debugger durch, bis der Code von Ihren Erwartungen abweicht (dh er sieht nicht wie der Baum aus, den Sie in Schritt 1 gezeichnet haben). 4. Verwenden Sie den Debugger, um den Programmstatus zu untersuchen, um zu sehen, warum dies geschah. Eventuell mehrere Male laufen, um die Abweichung zurück zur Quelle zu verfolgen. – user4581301

Antwort

0

Der Wurzelzeiger im Haupt erklärt() außer Kraft gesetzt, die globalen Wurzelzeiger. Dann ist beim ersten findpos() der Stamm (global) immer noch NULL. So ersetzen Sie einfach diesen Code:

int main() 
{ 
    struct node *root= newNode(4); 
    root->left=newNode(3); 
    root->left->left=newNode(2); 
    root->right=newNode(6); 

    int n; 
    cin>>n; 
    insert(n); 
    cout<<pos->data; //just trying to see if it works 
    return 0; 
} 

Durch diese:

int main() 
{ 
    root= newNode(4); 
    root->left=newNode(3); 
    root->left->left=newNode(2); 
    root->right=newNode(6); 

    int n; 
    cin>>n; 
    insert(n); 
    cout<<pos->data; //just trying to see if it works 
    return 0; 
} 
0

die Hauptmethode geändert, so dass es root in globalen Namensraum ändert; bevor Sie einen neuen Knoten mit der Bezeichnung root localy innerhalb main deklarierten.

int main() { 
    //  struct node *root = newNode(4); // you made this root a member of main. 
    // not a global member anymore. 

        root = newNode(4); // use this 

      // Populate some nodes 
        root->left=newNode(3); 
        root->left->left=newNode(2); 
        root->right=newNode(6); 

        /* tree so far: 
        *    4  
        *   /\ 
        *   3 6 
        *   /
        *   2 
        */ 


        int n; 
        cin >> n; 
        cout << "user input " << n << "\n"; 

        insert(n); 
        cout << pos->data; //just trying to see if it works 

        return 0; 
} 
Verwandte Themen