2016-08-01 25 views
0

Ich mache einen Destruktor für einen binären Suchbaum. Ich traf eine Endlosschleife mit der ersten While-Schleife, weil der linke Zeiger des Kopfes nie auf NULL gesetzt wird, wenn Kill auf NULL gesetzt ist. Warum ist das und wie kann ich es beheben?Destruktor für binäre Suchbaum

Vielen Dank im Voraus!

BST::~BST() 
{ 
    Node* kill = head; 
    /* 
    While-loop runs until all of head's left branch has been deleted 
    */ 
    while(head->get_left() != NULL) 
    { 

     kill = head->get_left();//Set the pointer variable kill to heads left node. 

     /* 
     While-loop moves the kill pointer to a bottom node with that has no children 
     */ 
     while(kill->get_left() != NULL && kill->get_right() != NULL) 
     { 
      if(kill->get_left() != NULL) 
      { 
       kill = kill->get_left(); 
      } 
      if(kill->get_right() != NULL) 
      { 
       kill = kill->get_right(); 
      } 
     } 

     delete kill;//deletes the bottom node with no children 
     kill = NULL; 
    } 

    kill = head; 
    /* 
    While-loop runs until all of head's right branch has been deleted 
    */ 
    while(head->get_right() != NULL) 
    { 

     kill = head->get_right();//Sets the kill pointer to head's right node 

     /* 
     While-loop moves the kill pointer to a bottom node with no children 
     */ 
     while(kill->get_left() != NULL && kill->get_right() != NULL) 
     { 
      if(kill->get_left() != NULL) 
      { 
       kill = kill->get_left(); 
      } 
      if(kill->get_right() != NULL) 
      { 
       kill = kill->get_right(); 
      } 
     } 

     delete kill;//deletes the bottom node with no children 
     kill = NULL; 


    } 

    delete kill;//deletes the head node 



} 
+1

[MCVE] bitte, wie üblich. –

Antwort

2

Sieht so aus, als könnten Sie Ihren Destruktor vereinfachen. Implementieren Sie Destruktor für Node. Etwas wie folgt aus:

Node::~Node() 
{ 
    delete left; 
    left = NULL; 
    delete right; 
    right = NULL; 
} 

In diesem Fall Ihre BST::~BST() wird:

BST::~BST() 
{ 
    delete head; 
    head = NULL; 
} 
+2

Auswirkungen auf "nullptr" ist nicht erforderlich. Und mit 'std :: unique_ptr' würde sogar dieser vereinfachte Code vermieden. – Jarod42

Verwandte Themen