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 :(得分:3)
您希望通过引用传递指针的唯一时间是您想要更改指针指向的内容。如果您想删除节点后将节点设置为NULL
,则需要传递BSTNode*&
。
答案 1 :(得分:2)
不,指针是按值传递的,因此当您将指针作为参数传递时,您实际上是在“复制”指针。只有当您希望被调用者修改调用者中的参数时才通过引用传递。
答案 2 :(得分:0)
你不必。您为DeleteChildren函数指定的指针将被删除,因此rootNode也将被删除。
您的参数可以是BSTNode *&类型的参数。如果需要修改存储rootNode的地址。在这种情况下,你没有。
答案 3 :(得分:0)
没有。假设rootNode
也是BSTNode*
类型,rootNode
和node
都指向相同的内存位置。