2011-02-18 6 views
3
void DeleteChildren(BSTNode *node) 
{ 
    // Recurse left down the tree... 
    if(node->HasLeftChild()) DeleteChildren(node->GetLeftChild()); 
    // Recurse right down the tree... 
    if(node->HasRightChild()) DeleteChildren(node->GetRightChild()); 

    // Clean up the data at this node. 
    node->ClearData(); // assume deletes internal data 

    // Free memory used by the node itself. 
    delete node; 
} 

// Call this from external code. 
DeleteChildren(rootNode); 

이 기능은 BST를 재귀 적으로 삭제하는 기능입니다.함수 매개 변수 - 포인터 또는 포인터에 대한 참조?

첫 번째 줄에 대해 BSTNode *node, 으로 수정해야합니까? BSTNode *& node으로 수정해야합니까?

+0

뭔가 잘못되었다고 생각하는 코드에 문제가 있습니까? 그것은 나에게 잘 보인다. – Kai

답변

2

아니요, 포인터는 값으로 전달되므로 본질적으로 포인터를 매개 변수로 전달할 때 포인터를 "복사"합니다. 수신자가 호출자의 매개 변수를 수정하도록하려면 참조로 전달하십시오.

3

참조로 포인터를 전달하려는 경우는 포인터가 가리키는 내용을 변경하려는 경우입니다. 노드를 삭제 한 후 노드를 NULL으로 설정하려면 BSTNode*&으로 전달해야합니다.

0

당신은 꼭 할 필요는 없습니다. DeleteChildren 함수에 지정한 포인터가 삭제되므로 rootNode도 삭제됩니다.

저장된 rootNode 주소를 수정해야하는 경우 매개 변수의 유형이 BSTNode * & 일 수 있습니다. 이 경우에는 그렇지 않습니다.

0

No. rootNodeBSTNode* 유형 인 것으로 가정하면 rootNodenode이 동일한 메모리 위치를 나타냅니다.

관련 문제