2016-11-16 4 views
0
else if (left == NULL) { 
    Node *tempNode = new Node(); 
    tempNode = right; 
    tempNode = right; 
    tempNode->parent = parent; 
    if (t < parent->data) parent->left = tempNode; 
    if (t > parent->data) parent->right = tempNode; 
    delete this; 
    } 

부모에게 자식이 하나만있을 때 이진 검색 트리의 fcn을 제거하는 코드입니다. 그것은 내가 삭제하고자하는 노드를 삭제하지만 그 뒤에 오는 모든 것을 삭제합니다. 도와주세요.이진 검색 트리 제거 기능이 작동하지 않습니다.

+0

죄송합니다. 나는 그것을 언급하는 것을 잊었다. 내 잘못이야. 예, C++. 그것을 지적 해 주셔서 감사합니다 –

+0

't'은 무엇입니까? 전체 기능을 우리에게 보여줄 수 있다면 더 좋아 보일 것입니다. – ydoow

답변

0

delete this을 실행하기 전에 왼쪽 및 오른쪽 포인터를 0으로 설정해야합니다. 그렇지 않으면 왼쪽 및 오른쪽 하위 트리가 삭제됩니다 (올바르게 소멸자를 작성했다고 가정).

가능한 경우 케이스 t == parent->data을 고려해야합니다. 중복 t > parent->data 테스트를 제거하고 else을 사용하십시오.

그리고 확실히 new Node()을 할당 할 필요가 없습니다. 바로 다음 행에 변수를 지정합니다. 이런 식으로 코드를 작성하지 마십시오.

그것은해야한다 :

Node *tempnode = right; 
right->parent = this->parent; 
right = nullptr; 
// etc.