2016-08-01 2 views
0

이진 검색 트리에 대한 소멸자를 만들고 있습니다. kill이 NULL로 설정되면 머리의 왼쪽 포인터가 NULL로 설정되지 않으므로 첫 번째 while 루프로 무한 루프가 발생합니다. 왜 그런가요? 어떻게 고칠 수 있습니까?이진 검색 트리에 대한 소멸자

미리 감사드립니다.

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]하시기 바랍니다. –

답변

2

소멸자를 단순화하는 것처럼 보입니다. Node에 대한 소멸자를 구현하십시오. 이런 식으로 뭔가 :

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

이 경우 귀하의 BST::~BST()에는 다음과 같습니다 평소와 같이

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

'nullptr '에 영향을주지 않습니다. 'std :: unique_ptr'을 사용하면이 간단한 코드를 피할 수 있습니다. – Jarod42

관련 문제