2012-12-11 9 views
0

이 모양이 맞습니까? 내가 삭제 기능을 구현하려고하는 것을 의미합니다. 여기 이진 검색 트리에서 findNode

Node* BST::findNode(int tofind) { 
    Node* node = new Node;  
    node = root; 
    while (node != NULL) { 
     if (node->val == tofind) { 
      return node; 
     } else if (tofind < node->val) { 
      node = node->left; 
     } else { 
      node = node->right; 
     } 
    } 
} 

void BST::Delete(int todelete) { 

    // bool found = false; 

    Node* toDelete = new Node(); 
    toDelete=findNode(todelete); 
    if(toDelete->val!=NULL) { 
      cout << toDelete->val << endl; 
    } 
} 

이는 것을 어떤 아이디어를 실행하는 세그먼트 오류가 발생,이, 일에 근처에도 삭제되지 것입니다 만?

답변

0

오 삭제에 내가 했어야 그것 때문에 기다립니다

if(toDelete!=NULL) { 
    cout << toDelete->val << endl; 
} 

if(toDelete->val!=NULL) 
0

전에 findNode() 주요 문제는 당신은 결코 당신이 발견 한 노드를 반환하지 않는다는 것이다. 그래서 당신은 세그 폴트를 얻고 있습니다.

findNode()NULL을 반환했는지 확인해야합니다. deleteNode() 또한 findNode()NULL을 반환했는지 확인해야합니다. 물론 나머지 삭제 로직을 코딩해야합니다.

마지막으로 두 개의 new Node 할당이 필요하지 않으며 메모리가 누수됩니다.

관련 문제