2016-05-03 8 views
-1

Ich versuche, einen Code zu schreiben, um Elemente in einen Binärbaum ohne Rekursion einzufügen.Aber das Problem ich konfrontiert ist, dass jedes Mal, wenn ich versuche, einen Knoten einzufügen, wird es nicht eingefügt und der Baum nicht wachsen wie erwartet. Nur das erste Element bleibt im Baum.Binär Baum Codefehler

void insert(struct node **head1,int data1) 
{ 
    struct node *temp1,*temp; 

    temp=*head1; 
    struct node *datatemp,*prevtemp; 
    while(temp!=NULL) 
    { 
     if(temp->data < data1) 
     { 
      temp=temp->right; 
     } 
     else if(temp->data > data1) 
     { 
      temp=temp->left; 
     } 
    } 
    datatemp=(struct node *)malloc(sizeof(struct node)); 
    datatemp->data=data1; 
    datatemp->right=NULL; 
    datatemp->left=NULL; 
    temp=datatemp; 
} 

Bitte helfen..ich habe versucht zu debuggen, aber ich kann den Fehler in meiner Logik nicht finden.

+2

Sie könnten Ihren Tag von C++ zu C bearbeiten, da Sie anscheinend die Sprache C verwenden. Bitte lies dies auch: [mcve]. – anatolyg

+0

Was denkst du soll das 'temp = datatemp;' tun? – StoryTeller

+0

Stellen Sie sicher, dass Sie den Fall behandeln, in dem die zweite Nummer, die Sie einfügen möchten, dieselbe wie die erste Nummer ist. Ihr Code behandelt < & >, aber nicht == – attaboy182

Antwort

1

Hier setzt temp=datatemp; den lokalen Zeiger in Ihrer Funktion, um auf den neu zugewiesenen Knoten zu zeigen.
Aber sobald die Funktionen existieren, ist diese lokale verschwunden, und Ihr Speicher leckt. Sie ändern den gefundenen Knoten nicht.