2012-12-01 4 views
0

내 BST에는 노드가 하나만 있습니다. 그 노드를 지우는 코드를 작성했지만 여전히 거기에 있습니다. 마치 갱신되지 않은 것처럼 ... 업데이트되었습니다. 여기에 간단한 코드가 있습니다. 단지 케이스를 테스트하는 것입니다.BST에서 유일한 노드 삭제

void Delete(BSTree* tree, int& key) 
{ 
    if (key == tree->key) 
     tree=NULL; 
} 

그리고 BSTree 클래스에는 parrent 파트가 없습니다. 그냥 값과 왼쪽 및 오른쪽 포인터. 내 코드에 어떤 문제가 있습니까? 고맙습니다!

답변

1

실제 tree 포인터는 변경하지 않습니다. 스택에 할당 된 포인터 만 변경하여 전달 된 포인터와 동일한 주소를 가리 킵니다.

BSTree *&tree을 원하면 변경 사항이 적용되도록 원래 포인터에 대한 참조를 얻으십시오.

Als가 지적했듯이, 위의 메모리 외에도 메모리를 확보하는 것을 잊지 마십시오.

+0

정말 고마워요! 그것은 작동합니다 :) –

+0

그리고 한 가지 더, 나는 나무를 표시하는 코드가 있고 만약 그것이 NULL이라면 나는 << cout을 할 것입니다; 하지만 그것은 마치 ... 빈 트리가 아닌 것입니까? –

+0

그것은 당신의 나무에'NULL '이 무엇을 의미하는지에 달려 있습니다. 당신의 디스플레이 기능에서, 당신은 실제로 그것을 표시하기 전에'NULL'에서 멈출 것입니다 (당신은 그것을 처리하려고 시도하기 전에 멈추고 있습니다, 그렇지 않으면 충돌 할 것입니다). – pickypg